Pagini recente » Cod sursa (job #1053241) | Cod sursa (job #1040492) | Cod sursa (job #1860861) | Cod sursa (job #2325534) | Cod sursa (job #1477748)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <queue>
#define NMAX 30007
using namespace std;
FILE *fin, *fout;
int n, m, x, y, sze, a, in = 1;
struct muchie
{
int vec;
int cost;
} tmp;
vector<muchie> adj[NMAX];
struct mqueue
{
int nod;
int sum;
int tata;
} tmp2, tmp3;
queue<mqueue> q;
void citire()
{
scanf("%d%d%d%d", &n, &m, &x, &y);
for(int i = 1; i<= m; ++i)
{
scanf("%d%d%d", &a, &tmp.vec, &tmp.cost);
adj[a].push_back(tmp);
swap(a, tmp.vec);
adj[a].push_back(tmp);
}
}
void bfs()
{
tmp2.nod = x;
tmp2.tata = -1;
q.push(tmp2);
while(!q.empty())
{
tmp3 = q.front();
if(tmp3.nod == y)
{
printf("%d\n", tmp3.sum);
break;
}
sze = adj[tmp3.nod].size();
for(int j = 0; j< sze; ++j)
{
if(adj[tmp3.nod][j].vec == tmp3.tata) continue;
tmp2.nod = adj[tmp3.nod][j].vec;
tmp2.tata = in;
if(tmp2.nod < tmp3.nod) tmp2.sum = tmp3.sum - adj[tmp3.nod][j].cost;
else tmp2.sum = tmp3.sum + adj[tmp3.nod][j].cost;
q.push(tmp2);
}
q.pop();
in++;
}
}
int main()
{
fin = freopen("sate.in", "r", stdin);
fout = freopen("sate.out", "w", stdout);
citire();
bfs();
fclose(fin);
fclose(fout);
return 0;
}