Pagini recente » Cod sursa (job #2365898) | Cod sursa (job #245439) | Cod sursa (job #2455857) | Cod sursa (job #1867679) | Cod sursa (job #397165)
Cod sursa(job #397165)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int N, M, X, Y, D[30001];
vector<pair<int, int> > G[30001];
queue<int> Q;
bool viz[30001];
int main() {
fstream f1, f2;
int i, j, p, q;
f1.open("sate.in", ios::in);
f1>>N>>M>>X>>Y;
for(i=1; i<=M; i++) {
f1>>p>>q>>j;
G[p].push_back(make_pair(q, j));
G[q].push_back(make_pair(p, j));
}
f1.close();
//plec din X si ajung in Y
viz[X]=1;
for(vector<pair<int, int> >::iterator it=G[X].begin(); it!=G[X].end(); it++) {
viz[(*it).first]=1;
D[(*it).first]=(*it).second;
Q.push((*it).first);
}
while(!Q.empty()) {
p=Q.front(); Q.pop();
for(vector<pair<int, int> >::iterator it=G[p].begin(); it!=G[p].end(); it++) {
i=(*it).first; j=(*it).second;
if(!viz[i]) {
viz[i]=1; Q.push(i);
if(i<p && p<X) {
D[i]=D[p]+j;
}
else if(p<i && p<X && i<X) {
D[i]=D[p]-j;
}
else if(p<X && X<i) {
D[i]=j-D[p];
}
else if(X<p && p<i) {
D[i]=D[p]+j;
}
else if(X<p && X<i && i<p) {
D[i]=D[p]-j;
}
else if(X<p && i<X) {
D[i]=j-D[p];
}
}
}
if(viz[Y]) { break; }
}
f2.open("sate.out", ios::out);
f2<<D[Y]<<endl;
f2.close();
return 0;
}