Pagini recente » Cod sursa (job #692012) | Cod sursa (job #907442) | Cod sursa (job #423892) | Cod sursa (job #705212) | Cod sursa (job #1281860)
#include<fstream>
#include<iostream>
#include<queue>
#include<vector>
using namespace std;
ifstream in("pscnv.in");
ofstream out("pscnv.out");
const int NMAX = 250009;
const int INF = 1 << 30;
vector< pair<int,int> > v[NMAX];
queue< int > coada;
int n,m,sol[NMAX],x,y,viz[NMAX];
char s[1000000];
int citire(int& poz)
{
int num = 0;
while(s[poz] <= '9' && s[poz] >= '0')
{
num = num*10 + (s[poz]-48);
poz++;
}
return num;
}
void read()
{
in>>n>>m>>x>>y;
int j = 1;
in.get(s,1000000,'\0');
int a ,b,c;
for(int i = 1 ; i <= m ; i++){
while((int)s[j] < 48 || (int)s[j] > 57)
j++;
a = citire(j);
j++;
b = citire(j);
j++;
c = citire(j);
v[a].push_back(make_pair(b,c));
}
in.close();
for(int i = 1 ; i <= n ; i++)
if(i != x)
sol[i] = INF;
}
int bmf(int start)
{
sol[start] = 0;
coada.push(start);
viz[start] = 1;
int i,k,vecin;
while( !coada.empty() )
{
k = coada.front();
viz[k] = 0;
for(i = 0 ; i < v[k].size() ; i++){
vecin = v[k][i].first;
if(sol[vecin] > max(v[k][i].second,sol[k])){
sol[vecin] = max(v[k][i].second,sol[k]);
if(!viz[vecin]){
coada.push(vecin);
viz[vecin] = 1;
}
}
}
coada.pop();
}
return sol[y];
}
int main()
{
read();
out<<bmf(x);
return 0;
}