Cod sursa(job #504256)

Utilizator mgntMarius B mgnt Data 27 noiembrie 2010 11:25:19
Problema PScNv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
using namespace std;

int const maxn=250*1000,maxm=500*1000,maxk=1000;

struct S1{int x,y,k;} B[maxm],A[maxm];
int C[1+maxn],I[2+maxn],J[1+maxn],V[1+maxn];

int main()
{	ifstream is("pscnv.in");
	ofstream os("pscnv.out");
	int n,m,x,y,i,p,q,r,e,f,u,w,t,k;
	is>>n>>m>>x>>y;
	for(i=0;m>i;++i){is>>B[i].x>>B[i].y>>B[i].k;}
	for(i=1;n>=i;++i){C[i]=0;}
	for(i=0;m>i;++i){++C[B[i].x];}
	for(I[1]=0,i=2;n+1>=i;++i){I[i]=I[i-1]+C[i-1];}
	for(i=1;n>=i;++i){J[i]=I[i];}
	for(i=0;m>i;++i){A[J[B[i].x]++]=B[i];}
	p=1;r=maxk;
	while(p<r)
	{	q=(p+r)/2;
		for(i=1;n>=i;++i){V[i]=0;}
		V[x]=1;J[0]=x;e=0;f=1;
		while((e<f)&&(0==V[y]))
		{	u=J[e++];i=I[u];t=I[u+1];
			while(i<t)
			{	w=A[i].y;k=A[i++].k;
				if((k<=q)&&(0==V[w]))
				{V[w]=1;J[f++]=w;}
			}
		}
		if(0!=V[y]){r=q;}else{p=q+1;}
	}
	os<<p<<endl;
	return 0;
}