Pagini recente » Cod sursa (job #1154850) | Profil erzsike | Diferente pentru implica-te/extinde-arhiva/autor-necunoscut intre reviziile 3 si 11 | Rating Erimia Catalin (cata27) | Cod sursa (job #2024252)
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y, d;
vector <pair <int, int> > v[30005];
bool f[30005], viz[30005];;
inline int bfs(int nod, int cost){
if(nod == d) return cost;
for(vector <pair <int, int> > :: iterator it = v[nod].begin() ; it != v[nod].end() ; ++it){
if(viz[it->first]) continue ;
if(it->first > nod){
viz[it->first] = 1;
int k = bfs(it->first, cost + it->second);
viz[it->first] = 0;
if(k == -1) continue ;
return k;
}
else{
viz[it->first] = 1;
int k = bfs(it->first, cost - it->second);
viz[it->first] = 0;
if(k == -1) continue ;
return k;
}
}
return -1;
}
int main()
{
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d%d%d%d", &n, &m, &x, &y);
int a, b, dist;
for(int i = 1; i <= m ; ++i){
scanf("%d%d%d", &a, &b, &dist);
v[a].push_back(make_pair(b, dist));
v[b].push_back(make_pair(a, dist));
f[a] = f[b] = 1;
}
for(int i = 1; i <= n ; ++i){
if(!f[i]) continue ;
d = x;
viz[i] = 1;
a = bfs(i, 0);
d = y;
// memset(viz, 0, sizeof(viz));
// viz[i] = 1;
b = bfs(i, 0);
if(a == -1 || b == -1) continue ;
printf("%d", b - a); return 0;
}
return 0;
}