Pagini recente » Cod sursa (job #1360161) | Cod sursa (job #3154838) | Cod sursa (job #371359) | Cod sursa (job #2799594) | Cod sursa (job #1081648)
#include<fstream>
#include<vector>
using namespace std;
#define maxn 30002
int d[maxn];
int stack[maxn];
int colour[maxn];
vector<int> adj[maxn];
vector<int> disAdj[maxn];
int main(void) {
ifstream in;
ofstream out;
in.open("sate.in");
out.open("sate.out");
int n, m, x, y;
in >> n >> m >> x >> y;
for(int i=0;i<=n;++i) {
d[i] = -1;
colour[i] = 0;
}
for(int i=0;i<m;++i) {
int s,e,dist;
in >> s >> e >> dist;
adj[s].push_back(e);
disAdj[s].push_back(dist);
adj[e].push_back(s);
disAdj[e].push_back(dist);
}
int stackHead = 0;
int stackTail = 0;
stack[stackTail++] = x;
d[x] = 0;
colour[x] = 1;
while(stackHead < stackTail) {
int curent = stack[stackHead++];
if(curent == y)
break;
for(unsigned int i=0;i<adj[curent].size();++i) {
if(colour[adj[curent][i]] == 0) {
stack[stackTail++] = adj[curent][i];
colour[adj[curent][i]] = 1;
if(curent < adj[curent][i]) {
d[adj[curent][i]] = d[curent] + disAdj[curent][i];
}
else {
d[adj[curent][i]] = d[curent] - disAdj[curent][i];
}
}
}
colour[curent] = 2;
}
if(d[y] < 0)
d[y] *= -1;
out << d[y] << "\n";
out.close();
in.close();
return 0;
}