Pagini recente » Cod sursa (job #298618) | Cod sursa (job #2360117) | Cod sursa (job #1967570) | Cod sursa (job #2087951) | Cod sursa (job #329067)
Cod sursa(job #329067)
#include<stdio.h>
#include<string>
#include<vector>
#include<iostream>
using namespace std;
FILE*fin=fopen("pscnv.in","r");
FILE*fout=fopen("pscnv.out","w");
#define nm 250005
#define mm 500005
#define pb push_back
#define mkp make_pair
#define max(a,b)((a)>(b)?(a):(b))
#define maxbuf 65536
vector<pair<int,int> > g[nm];
int n,m,x,y,cd[nm],d,ind;
char viz[nm],buf[maxbuf];
inline void refbuf()
{
int ans=fread(buf,1,maxbuf,fin);
if(ans<maxbuf) buf[ans]=0;
ind=0;
}
inline int getnr()
{
int ans=0;
one:
while(ind<maxbuf&&!isdigit(buf[ind])) ind++;
if(ind==maxbuf)
{
refbuf();
goto one;
}
two:
while(ind<maxbuf&&isdigit(buf[ind]))
{
ans=ans*10+buf[ind]-'0';
ind++;
}
if(ind==maxbuf)
{
refbuf();
goto two;
}
return ans;
}
inline int posibil(int val)
{
int i,nod,nnod,cost,j;
for(i=1;i<=n;i++)
viz[i]=0;
viz[x]=1;
d=0;
cd[0]=x;
for(i=0;i<=d;++i)
{
nod=cd[i];
for(j=0;j<g[nod].size();j++)
{
nnod=g[nod][j].first;
cost=g[nod][j].second;
if(cost>val||(viz[nnod])) continue;
if(nnod==y) return 1;
d++;
cd[d]=nnod;
viz[nnod]=1;
}
}
return 0;
}
int main()
{
int i,j,a,b,c,st,dr,mij,cmax=0;
refbuf();
n=getnr();
m=getnr();
x=getnr();
y=getnr();
for(i=1;i<=m;i++)
{
a=getnr();
b=getnr();
c=getnr();
g[a].pb(mkp(b,c));
cmax=max(cmax,c);
}
st=1;dr=cmax;
while(st<dr)
{
mij=(st+dr)>>1;
if(posibil(mij)) dr=mij;
else st=mij+1;
}
fprintf(fout,"%d",st);
fclose(fin);
fclose(fout);
return 0;
}