Pagini recente » Cod sursa (job #1072454) | Cod sursa (job #1764509) | Cod sursa (job #194676) | Cod sursa (job #2603560) | Cod sursa (job #93296)
Cod sursa(job #93296)
#include <stdio.h>
#include <vector>
#include <stdlib.h>
using namespace std;
const int N_MAX = 30010;
vector <pair<int, int> > G[N_MAX];
int Y, is[N_MAX];
int dist, fin;
void find(int sat)
{
is[sat] = 1;
if (sat == Y) {
fin = dist;
}
vector <pair<int, int> >::iterator it;
for (it = G[sat].begin(); it != G[sat].end(); ++ it) {
if (!is[it -> first]) {
if (it -> first < sat) {
dist -= it -> second;
} else {
dist += it -> second;
}
find(it -> first);
if (it -> first < sat) {
dist += it -> second;
} else {
dist -= it -> second;
}
}
}
}
char buf[65536];
int main()
{
freopen("sate.in", "r", stdin);
#ifndef _SCREEN_
freopen("sate.out", "w", stdout);
#endif
setbuf(stdin, buf);
int N, M, X, i, x, y, c;
int mn, mx;
scanf("%d %d %d %d\n", &N, &M, &X, &Y);
int aux;
if (X > Y) {
aux = X;
X = Y;
Y = aux;
}
for (i = 1; i <= M; i ++) {
scanf("%d %d %d\n", &x, &y, &c);
if (x < y) {
mn = x;
mx = y;
} else {
mx = x;
mn = y;
}
G[mn].push_back(make_pair(mx, c));
G[mx].push_back(make_pair(mn, c));
}
dist = 0;
find(X);
printf("%d\n", fin);
return 0;
}