Pagini recente » Istoria paginii runda/preoji_cl10_lspvs/clasament | Cod sursa (job #247675) | Istoria paginii runda/pregatire_lot2_juniori | Istoria paginii runda/sim_info15/clasament | Cod sursa (job #73984)
Cod sursa(job #73984)
#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;
vector<short>::iterator it;
vector<int>::iterator it2;
Q[inc = sf = 0] = X, viz[X] = 1;
while(inc <= sf)
{
x = Q[inc++];
for(it = G[x].begin(), it2 = R[x].begin(); it != G[x].end(); ++it,
++it2)
{
if(!viz[*it])
viz[*it] = 1, Q[++sf] = *it,
D[*it] = D[x] + (*it2)*(x<(*it)?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;
}