Cod sursa(job #1894811)

Utilizator ChiriGeorgeChiriluta George-Stefan ChiriGeorge Data 27 februarie 2017 16:03:41
Problema Sate Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <queue>
#include <vector>
#define NMAX 30005

using namespace std;

ifstream fin("sate.in");
ofstream fout("sate.out");

struct {
    int father;
    int c;
}FT[NMAX];

int n, m, x, y, visited[NMAX], road;
vector <int> G[NMAX], C[NMAX];

void BFS(int node)
{
    queue <int> Q;
    int v, i;
    Q.push(x);
    visited[x] = 1;
    while(!Q.empty())
    {
        v = Q.front();
        Q.pop();
        for(i = 0; i < G[v].size(); i++)
            if(visited[G[v][i]] == 0)
            {
                Q.push(G[v][i]);
                visited[G[v][i]] = 1;
                FT[G[v][i]].father = v;
                FT[G[v][i]].c = C[v][i];
                if(G[v][i] == y)
                    return;
            }
    }
}

int main()
{
    int i, e1, e2, cost;
    fin >> n >> m >> x >> y;
    for(i = 1; i <= m; i++)
    {
        fin >> e1 >> e2 >> cost;
        G[e1].push_back(e2);
        G[e2].push_back(e1);
        C[e1].push_back(cost);
        C[e2].push_back(-cost);
    }
    BFS(x);
    //for(i = 1; i <= n; i++)
        //fout <<FT[i].father << ' ' << FT[i].c<<'\n';
    for(i = y;i != x; i = FT[i].father)
        road += FT[i].c;
    fout << road << '\n';
    return 0;
}