Cod sursa(job #2220816)

Utilizator LucaSeriSeritan Luca LucaSeri Data 12 iulie 2018 17:00:15
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <stdio.h>
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;

const int MAXN = 5e4 + 2;

int d[MAXN];
int best[MAXN];

int main() {

    ifstream f("distante.in");
    ofstream g("distante.out");

    int t;
    f >> t;

    while(t--) {
        int n, m, s;
        f >> n >> m >> s;
        for(int i = 1; i <= n; ++i) {
            f >> d[i];
        }

        memset(best, 0x3f, sizeof best);
        best[s] = 0;
        for(int i = 1; i <= m; ++i) {
            int a, b, c;
            f >> a >> b >> c;
            best[a] = min(best[a], d[b] + c);
            best[b] = min(best[b], d[a] + c);
        }

        bool ok = true;
        for(int i = 1; i <= n; ++i) {
            ok &= (best[i] == d[i]);
        }

        if(ok && d[s] == 0) g << "DA\n";
        else g << "NU\n";
    }
    return 0;
}