Pagini recente » Cod sursa (job #3032540) | Cod sursa (job #1121028) | Cod sursa (job #616149) | Cod sursa (job #2268672) | Cod sursa (job #296390)
Cod sursa(job #296390)
#include <cstdio>
#include <vector>
#include <bitset>
using namespace std;
#define pb push_back
#define maxN 30010
int D[maxN], N, M, X, Y, Q[maxN], st, dr;
vector <int> A[maxN];
vector <int> C[maxN];
bitset <maxN> viz;
void df (int x) {
st = dr = 0;
Q[dr ++] = x;
while (st < dr) {
x = Q[st ++];
viz[x] = 1;
for (int i = 0; i < (int) A[x].size(); ++ i)
if (!viz[A[x][i]]) {
viz[A[x][i]] = 1;
D[A[x][i]] = D[x] + C[x][i];
Q[dr ++] = A[x][i];
}
}
}
void parse () {
char s[32];
gets(s);
int a = 0, b = 0, c = 0, i;
for (i = 0; s[i] >= '0' && s[i] <= '9'; ++ i)
a = (a << 1) + (a << 3) + s[i] - '0';
for ( ++ i; s[i] >= '0' && s[i] <= '9'; ++ i)
b = (b << 1) + (b << 3) + s[i] - '0';
for ( ++ i; s[i] >= '0' && s[i] <= '9'; ++ i)
c = (c << 1) + (c << 3) + s[i] - '0';
A[a].pb(b);
A[b].pb(a);
C[a].pb(c);
C[b].pb(-c);
}
int main () {
freopen("sate.in", "r", stdin);
freopen("sate.out", "w", stdout);
scanf("%d%d%d%d\n", &N, &M, &X, &Y);
for ( ; M -- ; ) {
parse ();
}
df (X);
printf("%d\n", D[Y]);
}