Cod sursa(job #1370173)

Utilizator retrogradLucian Bicsi retrograd Data 3 martie 2015 13:18:51
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 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;
        }
        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) {
                fout<<"NU\n";
                gata = 1;
                break;
            }
        }
        if(gata) continue;
        dfs(start);
        if(nr_viz == n) {
            fout<<"DA\n";
        } else fout<<"NU\n";
    }
    return 0;
}