Cod sursa(job #1400744)

Utilizator retrogradLucian Bicsi retrograd Data 25 martie 2015 13:43:16
Problema Sate Scor 80
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.22 kb
#include<fstream>
#include<vector>
#include<stack>

using namespace std;
typedef int var;

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

#define MAXN 100002

struct Edge {
    var n, c;
    Edge(var a, var b) {
        n = a;
        c = b;
    }
    Edge(){}
};

var n;
var D[MAXN], DS[MAXN], I[MAXN];
bool VIZ[MAXN];
Edge *G[MAXN];
stack<var> ST;

void dfs(var node) {

    stack<var> ST;

    VIZ[node] = 1;
    ST.push(node);

    while(!ST.empty()) {
        var node = ST.top();
        ST.pop();
        for(var i=0; i<D[node]; i++) {
            auto &e = G[node][i];
            if(!VIZ[e.n]) {
                VIZ[e.n] = 1;
                DS[e.n] = DS[node] + e.c;
                ST.push(e.n);
            }
        }
    }
}

int main() {

    var m, i, j, a, b, c;

    fin>>n>>m>>i>>j;

    while(m--) {
        fin>>a>>b>>c;
        D[a]++;
        D[b]++;
    }

    for(var i=1; i<=n; i++) {
        G[i] = new Edge[D[i]];
    }

    fin.seekg(ios_base::beg);
    fin>>n>>m>>i>>j;

    while(m--) {
        fin>>a>>b>>c;
        G[a][I[a]++] = Edge(b, c);
        G[b][I[b]++] = Edge(a, -c);
    }

    dfs(i);
    fout<<DS[j];

    return 0;
}