Pagini recente » Cod sursa (job #119066) | Cod sursa (job #460538) | Cod sursa (job #2113087) | Cod sursa (job #2856041) | Cod sursa (job #2365553)
#include <bits/stdc++.h>
std::vector < std::pair <int, int> > v[30001];
std::pair <int, long long> coada[100025];
int trec[30001], dist[30001];
int main(){
FILE *fin, *fout;
int n, m, x, y, i, a, b, c, dst, nod, st, dr;
fin=fopen("sate.in", "r");
fout=fopen("sate.out", "w");
fscanf(fin, "%d%d%d%d", &n, &m, &x, &y);
for(i=0;i<m;i++){
fscanf(fin, "%d%d%d", &a, &b, &c);
v[a].push_back({b, c});
v[b].push_back({a, c});
}
st=0;
dr=1;
coada[st]={x, 0};
trec[x]=1;
while(st<dr){
nod=coada[st].first;
dst=coada[st].second;
dist[nod]=dst;
for(i=0;i<v[nod].size();i++){
if(trec[v[nod][i].first]==0){
trec[v[nod][i].first]=1;
coada[dr++]={v[nod][i].first, dst+(v[nod][i].first>nod)*v[nod][i].second-(v[nod][i].first<nod)*v[nod][i].second};
}
}
st++;
}
fprintf(fout, "%d", dist[y]);
fclose(fin);
fclose(fout);
return 0;
}