Pagini recente » Cod sursa (job #869515) | Cod sursa (job #2674671) | Cod sursa (job #2720980) | Cod sursa (job #1298073) | Cod sursa (job #1282899)
#include<cstdio>
#include<set>
#include<vector>
using namespace std;
const int NMAX = 250009;
const int INF = 1 << 30;
vector< pair<int,int> > v[NMAX];
set<pair<int,int> > heap;
int n,m,sol[NMAX],x,y,viz[NMAX],lungime;
void read()
{
freopen("pscnv.in","r",stdin);
scanf("%d%d%d%d",&n,&m,&x,&y);
int a ,b,c;
char sir[30],*p;
fgets(sir,3,stdin);
for(int i = 1 ; i <= m ; i++){
fgets(sir,30,stdin);
a = b = c = 0;
for(p = sir ; *p <= '9' && *p >= '0' ; p++) a= a*10 + (*p-48);
p++;
for(; *p <= '9' && *p >= '0' ; p++) b= b*10 + (*p-48);
p++;
for(; *p <= '9' && *p >= '0' ; p++) c= c*10 + (*p-48);
v[a].push_back(make_pair(b,c));
}
for(int i = 1 ; i <= n ; i++)
if(i != x)
sol[i] = INF;
}
int bmf(int start)
{
sol[start] = 0;
heap.insert(make_pair(0,start));
int nod,val;
while(!heap.empty()){
val = (*heap.begin()).first;
nod = (*heap.begin()).second;
heap.erase(*heap.begin());
for(int i = 0 ; i < v[nod].size() ; i++){
if(sol[v[nod][i].first] > max(sol[nod],v[nod][i].second)){
sol[v[nod][i].first] = max(sol[nod],v[nod][i].second);
heap.insert(make_pair(sol[v[nod][i].first],v[nod][i].first));
}
}
}
return sol[y];
}
int main()
{
freopen("pscnv.out","w",stdout);
read();
printf("%d",bmf(x));
return 0;
}