Pagini recente » Cod sursa (job #398244) | Cod sursa (job #1448585) | Cod sursa (job #126416) | Cod sursa (job #44131) | Cod sursa (job #1894825)
#include <fstream>
#include <queue>
#include <vector>
#include <cstdio>
#define NMAX 30005
using namespace std;
//ifstream fin("sate.in");
FILE*fin;
ofstream fout("sate.out");
struct {
int father;
int c;
}FT[NMAX];
int n, m, x, y, visited[NMAX], road;
vector <int> G[NMAX], C[NMAX];
void BFS(int node)
{
queue <int> Q;
int v, i;
Q.push(x);
visited[x] = 1;
while(!Q.empty())
{
v = Q.front();
Q.pop();
for(i = 0; i < G[v].size(); i++)
if(visited[G[v][i]] == 0)
{
Q.push(G[v][i]);
visited[G[v][i]] = 1;
FT[G[v][i]].father = v;
FT[G[v][i]].c = C[v][i];
if(G[v][i] == y)
return;
}
}
}
int main()
{
int i, e1, e2, cost;
fin = freopen("sate.in", "r", stdin);
fscanf(fin, "%d%d%d%d", &n, &m, &x, &y);
//fin >> n >> m >> x >> y;
for(i = 1; i <= m; i++)
{
fscanf(fin, "%d%d%d", &e1, &e2, &cost);
//fin >> e1 >> e2 >> cost;
G[e1].push_back(e2);
G[e2].push_back(e1);
C[e1].push_back(cost);
C[e2].push_back(-cost);
}
BFS(x);
//for(i = 1; i <= n; i++)
//fout <<FT[i].father << ' ' << FT[i].c<<'\n';
for(i = y;i != x; i = FT[i].father)
road += FT[i].c;
fout << road << '\n';
return 0;
}