Pagini recente » Cod sursa (job #1081401) | Cod sursa (job #759760) | Cod sursa (job #685673) | Cod sursa (job #2599861) | Cod sursa (job #3137886)
//Ilie Dumitru
#include<cstdio>
#include<vector>
const int NMAX=250005;
const int MAX=1024;
struct edge
{
int node, w;
};
int N;
int min[NMAX];
std::vector<edge> G[NMAX];
std::vector<int> nivel[MAX];
int solve(int x, int y)
{
int i, j, k, aux, m;
for(i=0;i<N;++i)
min[i]=MAX;
min[x]=0;
nivel[0].push_back(x);
for(i=0;i<MAX;++i)
{
for(j=0;j<(int)nivel[i].size();++j)
{
if(min[x=nivel[i][j]]==i)
{
if(x==y)
return i;
for(k=0;k<(int)G[x].size();++k)
{
aux=G[x][k].node;
m=std::max(G[x][k].w, i);
if(min[aux]>m)
{
nivel[m].push_back(aux);
min[aux]=m;
}
}
}
}
}
return 0;
}
int main()
{
FILE* f=fopen("pscnv.in", "r"), *g=fopen("pscnv.out", "w");
//FILE* f=stdin, *g=stdout;
int i, a, b, c, M, x, y;
fscanf(f, "%d%d%d%d", &N, &M, &x, &y);
for(i=0;i<M;++i)
{
fscanf(f, "%d%d%d", &a, &b, &c);
G[a-1].push_back({b-1, c});
}
fprintf(g, "%d\n", solve(x-1, y-1));
fclose(f);
fclose(g);
return 0;
}