Pagini recente » Cod sursa (job #2410861) | Cod sursa (job #2671062) | Cod sursa (job #270062) | Cod sursa (job #266332) | Cod sursa (job #1081662)
#include<fstream>
#include<vector>
using namespace std;
#define maxn 30002
typedef struct muchie {int x; int d;};
muchie muc;
int d[maxn];
int stack[maxn];
int colour[maxn];
vector<muchie> adj[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;
muc.x = e;
muc.d = dist;
adj[s].push_back(muc);
muc.x = s;
adj[e].push_back(muc);
}
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].x] == 0) {
stack[stackTail++] = adj[curent][i].x;
colour[adj[curent][i].x] = 1;
if(curent < adj[curent][i].x) {
d[adj[curent][i].x] = d[curent] + adj[curent][i].d;
}
else {
d[adj[curent][i].x] = d[curent] - adj[curent][i].d;
}
}
}
colour[curent] = 2;
}
if(d[y] < 0)
d[y] *= -1;
out << d[y] << "\n";
out.close();
in.close();
return 0;
}