Pagini recente » Cod sursa (job #2622084) | Cod sursa (job #485889) | Cod sursa (job #2492064) | Cod sursa (job #1532498) | Cod sursa (job #73982)
Cod sursa(job #73982)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX_N 30100
#define pb push_back
int N, M, X, Y, Q[MAX_N], D[MAX_N], viz[MAX_N];
vector<short> G[MAX_N];
vector<int> R[MAX_N];
void solve(void)
{
int inc, sf, i, y, x;
Q[inc = sf = 0] = X, viz[X] = 1;
while(inc <= sf)
{
x = Q[inc++];
for(i = 0; i < G[x].size(); i++)
{
y = G[x][i];
if(!viz[y])
viz[y] = 1, Q[++sf] = y, D[y] = D[x] + R[x][i]*(x<y?1:-1);
}
}
}
void read_data(void)
{
int i, a, b, c, ind;
char sir[256];
scanf("%d %d %d %d\n", &N, &M, &X, &Y);
for(i = 1; i <= M; i++)
{
fgets(sir, 256, stdin), ind = a = b = c = 0;
for(; sir[ind] >= '0' && sir[ind] <= '9'; ind++)
a = a*10+(sir[ind]-48);
for(ind++; sir[ind] >= '0' && sir[ind] <= '9'; ind++)
b = b*10+(sir[ind]-48);
for(ind++; sir[ind] >= '0' && sir[ind] <= '9'; ind++)
c = c*10+(sir[ind]-48);
G[a].pb(b), G[b].pb(a), R[a].pb(c), R[b].pb(c);
}
}
void write_data(void)
{
printf("%d\n", D[Y]);
}
int main(void)
{
freopen("sate.in", "rt", stdin);
freopen("sate.out", "wt", stdout);
read_data();
solve();
write_data();
return 0;
}