Pagini recente » Cod sursa (job #2320589) | Cod sursa (job #881935) | Cod sursa (job #941805) | Istoria paginii runda/aventurile_dariei_si_ale_lui_zeebah | Cod sursa (job #1477750)
#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, viz[NMAX];
struct muchie
{
int vec;
int cost;
} tmp;
vector<muchie> adj[NMAX];
struct mqueue
{
int nod;
int sum;
} 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;
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(viz[adj[tmp3.nod][j].vec]) continue;
viz[adj[tmp3.nod][j].vec] = 1;
tmp2.nod = adj[tmp3.nod][j].vec;
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;
}