Cod sursa(job #2215214)

Utilizator IulianOleniucIulian Oleniuc IulianOleniuc Data 21 iunie 2018 12:06:41
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <fstream>
#define NMAX 50010

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

int t;
int n, m, s;

int dp[NMAX];
bool isOK[NMAX];

int main() {
    bool ok;
    int a, b, c;

    fin >> t;
    for (int it = 0; it < t; it++) {
        fin >> n >> m >> s;
        for (int i = 1; i <= n; i++)
            fin >> dp[i];

        ok = !dp[s];
        for (int i = 1; i <= n; i++)
            isOK[i] = false;

        for (int i = 0; i < m; i++) {
            fin >> a >> b >> c;
            if (dp[a] + c < dp[b])
                ok = false;
            else if (dp[a] + c == dp[b])
                isOK[b] = isOK[a] = true;
        }

        if (ok)
            for (int i = 1; i <= n; i++)
                if (!isOK[i])
                    ok = false;
        fout << (ok ? "DA\n" : "NU\n");
    }

    fout.close();
    return 0;
}