Cod sursa(job #1392286)

Utilizator dorumusuroiFMI - Doru Musuroi dorumusuroi Data 18 martie 2015 15:58:44
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#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;
}