Pagini recente » Cod sursa (job #763013) | Cod sursa (job #2962835) | Cod sursa (job #780854) | Cod sursa (job #1565710) | Cod sursa (job #64368)
Cod sursa(job #64368)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Nm 250001
#define Mm 500000
int *G[Nm],*C[Nm],D[Nm],n,x0,y0;
int X[Mm],Y[Mm],K[Mm],m;
int U[Nm],Q[Nm];
void read()
{
char S[20],*p;
int i;
freopen("pscnv.in","r",stdin);
scanf("%d%d%d%d\n",&n,&m,&x0,&y0);
for(i=0;i<m;++i)
{
gets(S);
p=strtok(S," ");
X[i]=atoi(p);
p=strtok(NULL," ");
Y[i]=atoi(p);
p=strtok(NULL," ");
K[i]=atoi(p);
}
}
int BFS(int k)
{
int i,x,y,l,r;
for(i=1;i<=n;++i)
U[i]=0;
U[x0]=1;
Q[l=r=0]=x0;
while(l<=r && !U[y0])
{
x=Q[l++];
for(i=0;i<D[x];++i)
{
y=G[x][i];
if(!U[y] && C[x][i]<=k)
{
U[y]=1;
Q[++r]=y;
}
}
}
return U[y0];
}
int solve()
{
int i,j,k;
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];
}
i=j=K[0];
for(k=1;k<m;++k)
{
if(K[k]<i)
i=K[k];
if(K[k]>j)
j=K[k];
}
while(i<j)
{
k=(i+j)>>1;
if(BFS(k))
j=k;
else
i=k+1;
}
return i;
}
void write(int x)
{
freopen("pscnv.out","w",stdout);
printf("%d\n",x);
}
int main()
{
read();
write(solve());
return 0;
}