Pagini recente » Cod sursa (job #643178) | Cod sursa (job #2219792) | Cod sursa (job #2350595) | Cod sursa (job #1057336) | Cod sursa (job #1527197)
#include<cstdio>
#include<vector>
#define N 250000
#define M 500000
#define K 1000
using namespace std;
int lst[N+1];
int urm[M+1];
int vecin[M+1];
int cost[M+1];
int d[N+1];
vector<int> liste[K+1];
int k;
bool viz[N+1];
void adauga(int aux,int i){
urm[i]=lst[aux];
lst[aux]=i;
}
int schimba(int p){
p++;
while(p==liste[k].size()){
k++;
p=0;
}
return p;
}
void bfs(int x,int y){
int p,i;
k=0;
liste[k].push_back(x);
p=0;
while(viz[y]==false){
while(viz[liste[k][p]]==true) p=schimba(p);
x=liste[k][p];
viz[x]=true;
i=lst[x];
while(i>0){
if (viz[vecin[i]]==false &&(d[vecin[i]]>cost[i] ||d[vecin[i]]==-1)){
liste[cost[i]].push_back(vecin[i]);
d[vecin[i]]=cost[i];
}
i=urm[i];
}
}
}
int main(){
freopen ("pscnv.in","r",stdin);
freopen ("pscnv.out","w",stdout);
int n,m,i,x,y,aux;
scanf ("%d%d%d%d",&n,&m,&x,&y);
for(i=1;i<=m;i++){
scanf ("%d%d%d",&aux,&vecin[i],&cost[i]);
adauga(aux,i);
}
for(i=1;i<=n;i++)
d[i]=-1;
bfs(x,y);
printf ("%d",d[y]);
return 0;
}