Pagini recente » Monitorul de evaluare | Cod sursa (job #1102572) | Cod sursa (job #372095) | Cod sursa (job #2536683) | Cod sursa (job #378516)
Cod sursa(job #378516)
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
const char iname[]="pscnv.in";
const char oname[]="pscnv.out";
const int maxn=250005;
const int INF=100005;
char s[1024];
int p=1023;
void cit(int &x)
{
while(s[p]<'0'||s[p]>'9')
if(++p==1024)
fread(s,1,1024,stdin),p=0;
x=0;
while(s[p]>='0'&&s[p]<='9')
{
x=(x<<3)+(x<<1)+s[p]-'0';
if(++p==1024)
fread(s,1,1024,stdin),p=0;
}
}
vector<pair<int,int> > E[maxn];
vector<int> disE[maxn];
int n,x,y,i,z,k,S,D,m,dis[maxn],j;
int main()
{
freopen(iname,"r",stdin);
freopen(oname,"w",stdout);
cit(n);cit(m);cit(S);cit(D);
for(i=1;i<=m;++i)
{
cit(x);cit(y);cit(z);
E[x].push_back(make_pair(y,z));
}
for(i=1;i<=n;++i)
dis[i]=INF;
disE[0].push_back(S);
dis[S]=0;
for(i=0;i<=1000;++i)
for(j=0;j<disE[i].size();++j)
if(dis[disE[i][j]]==i)
{
for(vector<pair<int,int> >::iterator jt=E[disE[i][j]].begin();jt!=E[disE[i][j]].end();++jt)
if(max(jt->second,i)<dis[jt->first])
dis[jt->first]=max(jt->second,i),disE[max(jt->second,i)].push_back(jt->first);
}
printf("%d\n",dis[D]);
fclose(stdin);
fclose(stdout);
return 0;
}