Pagini recente » Cod sursa (job #2311335) | Cod sursa (job #819494) | Cod sursa (job #1782182) | Cod sursa (job #1467859) | Cod sursa (job #1392286)
#include <cstdio>
#include <queue>
using namespace std;
const char iname[]="sate.in";
const char oname[]="sate.out";
FILE *f = fopen(iname, "r");
FILE *g = fopen(oname, "w");
vector <int> vf[30001], pond[30001];
int viz[30001], sum[30001];
int n, m, x,y;
void citeste()
{
int a,b, pondere;
fscanf(f, "%d%d%d%d", &n, &m, &x, &y);
for(int i = 0; i < m; i++)
{
fscanf(f,"%d%d%d", &a, &b, &pondere);
vf[a].push_back(b);
vf[b].push_back(a);
pond[a].push_back(pondere);
pond[b].push_back(pondere);
}
}
void bf(int rad)
{
queue <int> coada;
coada.push(rad);
viz[rad] = 1;
int capat2 = 0;
while(!coada.empty() && capat2 != y)
{
rad = coada.front();
coada.pop();
int dim = vf[rad].size();
for(int i = 0; i < dim; i++)
{
capat2 = vf[rad][i];
if(!viz[capat2])
{
coada.push(capat2);
viz[capat2] = 1;
if(rad < capat2)
sum[capat2] = sum[rad] + pond[rad][i];
else
sum[capat2] = sum[rad] - pond[rad][i];
if (capat2 == y)
return ;
}
}
}
}
int main()
{
citeste();
bf(x);
fprintf(g, "%d", sum[y]);
return 0;
}