Pagini recente » Cod sursa (job #1014949) | Cod sursa (job #1082943) | Cod sursa (job #981708) | Cod sursa (job #529955) | Cod sursa (job #935459)
Cod sursa(job #935459)
#include <stdio.h>
#define infile "pscnv.in"
#define outfile "pscnv.out"
#define INF 10000
#define NMAX 250005
struct NOD {int x; short int c; NOD *adr;};
struct NOD_LISTA{int x; NOD_LISTA *adr;};
FILE *fin,*fout;
int n,m;
NOD *prim[NMAX];
int start,end;
short int vizitat[NMAX];
NOD_LISTA *startlista[1005],*endlista[1005];
inline int max(int x, int y)
{
return (x>y)?x:y;
}
inline void adaug_st(NOD *(&prim), int x, short int c)
{
NOD *a=new NOD;
a->x=x;
a->c=c;
a->adr=prim;
prim=a;
}
inline void lista_adaug_dr(NOD_LISTA *(&prim), NOD_LISTA *(&ultim), int x)
{
NOD_LISTA *a=new NOD_LISTA;
a->x=x;
a->adr=NULL;
if(!prim)
prim=ultim=a;
else
{ultim->adr=a;
ultim=a;}
}
void citire()
{
int i,u,v,c;
fin=fopen(infile,"r");
fscanf(fin,"%d %d %d %d\n",&n,&m,&start,&end);
start--;
end--;
for(i=0;i<n;i++)
prim[i]=NULL;
for(i=0;i<m;i++)
{
fscanf(fin,"%d %d %d",&u,&v,&c);
adaug_st(prim[u-1],v-1,c);
}
fclose(fin);
}
void exploreaza()
{
int i;
NOD *b;
for(i=0;i<=1000;i++)
while(startlista[i])
{
if(i==vizitat[startlista[i]->x])
{
b=prim[startlista[i]->x];
while(b)
{
if(vizitat[b->x] > max(i,b->c))
{
vizitat[b->x] = max(i,b->c);
lista_adaug_dr(startlista[max(i,b->c)],endlista[max(i,b->c)],b->x);
}
b=b->adr;
}
if(startlista[i]->x==end)
return;
}
startlista[i]=startlista[i]->adr;
}
}
int main()
{
int i;
citire();
for(i=0;i<n;i++)
vizitat[i]=INF;
for(i=0;i<=1000;i++)
startlista[i]=endlista[i]=NULL;
vizitat[start]=0;
lista_adaug_dr(startlista[0],endlista[0],start);
exploreaza();
fout=fopen(outfile,"w");
fprintf(fout,"%d\n",vizitat[end]);
fclose(fout);
return 0;
}