Cod sursa(job #1482927)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 8 septembrie 2015 12:53:20
Problema Sate Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <cstdio>
#include <queue>
using namespace std;


vector < pair<int, int> > vf[30001], pond[30001];
int viz[30001], sum[30001];
int n, m, x,y;
void citeste()
{
    freopen("sate.in", "r", stdin);
    int a,b, pondere;
    scanf("%d%d%d%d", &n, &m, &x, &y);
    for(int i = 0; i < m; i++)
        {
            scanf("%d%d%d", &a, &b, &pondere);
            vf[a].push_back(make_pair(b,pondere));
            vf[b].push_back(make_pair(a,pondere));
        }
}
void bf(int rad)
{
    queue <int> coada;
    coada.push(rad);
    viz[rad] = 1;
    int capat2 = 0, cost = 0;
    while(!coada.empty() && capat2 != y)
    {
        rad = coada.front();
        coada.pop();
        for(auto it = vf[rad].begin(); it != vf[rad].end(); ++it)
        {
            capat2 = it->first;
            cost = it->second;
            if(!viz[capat2])
            {
                coada.push(capat2);
                viz[capat2] = 1;
                if(rad < capat2)
                    sum[capat2] = sum[rad] + cost;
                else
                    sum[capat2] = sum[rad] - cost;
                if(capat2 == y)
                    return;
            }
        }
    }
}
int main()
{
    citeste();
    bf(x);
    freopen("sate.out", "w", stdout);
    printf("%d", sum[y]);
    return 0;
}