Pagini recente » Cod sursa (job #1142234) | Cod sursa (job #2423696) | Cod sursa (job #1413304) | Cod sursa (job #217241) | Cod sursa (job #64402)
Cod sursa(job #64402)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Nm 251
#define Mm 500
#define Km 1001
#define max(a,b) ((a)>(b)?(a):(b))
int *G[Nm],*C[Nm],D[Nm],Dm[Nm],n,x0,y0;
int X[Mm],Y[Mm],K[Mm],m;
struct node
{
int x;
node *next;
} *L[Km];
void read()
{
char S[20],*p;
int i;
FILE *fin=fopen("pscnv.in","r");
fscanf(fin,"%d%d%d%d\n",&n,&m,&x0,&y0);
for(i=0;i<m;++i)
{
fgets(S,20,fin);
p=strtok(S," ");
X[i]=atoi(p);
p=strtok(NULL," ");
Y[i]=atoi(p);
p=strtok(NULL," ");
K[i]=atoi(p);
}
fclose(fin);
}
void insert(node *&l, int x)
{
node *q=new node;
q->x=x;
q->next=l;
l=q;
}
void solve()
{
int i,j,d,x,y;
for(i=0;i<m;++i)
++D[X[i]];
for(i=1;i<=n;++i)
{
G[i]=(int*)malloc(D[i]*sizeof(int));
C[i]=(int*)malloc(D[i]*sizeof(int));
D[i]=0;
}
for(i=0;i<m;++i)
{
G[X[i]][D[X[i]]]=Y[i];
C[X[i]][D[X[i]]++]=K[i];
}
insert(L[0],x0);
Dm[x0]=0;
for(i=1;i<=n;++i)
if(i!=x0)
{
insert(L[Km-1],i);
Dm[i]=Km;
}
for(i=0;;++i)
while(L[i])
{
x=L[i]->x;
if(x==y0)
return;
L[i]=L[i]->next;
if(Dm[x]<i)
continue;
for(j=0;j<D[x];++j)
{
y=G[x][j];
d=max(Dm[x],C[x][j]);
if(d<Dm[y])
{
Dm[y]=d;
insert(L[d],y);
}
}
}
}
void write()
{
freopen("pscnv.out","w",stdout);
printf("%d\n",Dm[y0]);
}
int main()
{
read();
solve();
write();
return 0;
}