Cod sursa(job #1370197)

Utilizator retrogradLucian Bicsi retrograd Data 3 martie 2015 13:24:07
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream>
#include<vector>

using namespace std;
typedef int var;

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

#define MAXN 100001

var nr_viz = 0;
bool VIZ[MAXN];
vector<var> G[MAXN];
var D[MAXN];

var dfs(var node) {
    VIZ[node] = 1;
    nr_viz ++;
    for(auto vec : G[node]) {
        if(!VIZ[vec]) {
            dfs(vec);
        }
    }
}

int main() {
    var t, n, m, a, b, c, start;
    fin>>t;
    while(t--) {
        fin>>n>>m>>start;
        for(var i=1; i<=n; i++) {
            fin>>D[i];
            G[i].clear();
            VIZ[i] = 0;
        }

        nr_viz = 0;
        bool gata = 0;
        while(m--) {
            fin>>a>>b>>c;
            if(D[a] == D[b] + c) {
                G[b].push_back(a);
            } else if(D[b] == D[a] + c) {
                G[a].push_back(b);
            } else if(D[b] > D[a] + c || D[a] > D[b] + c) {
                gata = 1;
            }
        }

        if(D[start] != 0 || gata) {
            fout<<"NU\n";
            continue;
        }
        dfs(start);
        if(nr_viz == n) {
            fout<<"DA\n";
        } else fout<<"NU\n";
    }
    return 0;
}