Cod sursa(job #2753470)

Utilizator Vlad_AnicaAnica-Popa Vlad-Ioan Vlad_Anica Data 22 mai 2021 23:02:17
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 50000;

struct path
{
    int nextNode, weight;
};

int minDist[NMAX + 1];

int main()
{
    int j, t, i, n, m, s, l, r, w, k;
    FILE *fin = fopen("distante.in", "r");
    FILE *fout = fopen("distante.out", "w");
    fscanf(fin, "%d", &t);

    for (i = 0; i < t; i++)
    {
        fscanf(fin, "%d%d%d", &n, &m, &s);
        for (j = 1; j <= n; j++)
            fscanf(fin, "%d", &minDist[j]);

        vector<path> lists[NMAX + 1];
        for (j = 0; j < m; j++)
        {
            fscanf(fin, "%d%d%d", &l, &r, &w);
            lists[l].push_back({r, w});
            lists[r].push_back({l, w});
        }

        bool ok = 1, currOk;
        for (j = 1; j <= n && ok; j++)
        {
            currOk = 0;
            for (k = 0; k < lists[j].size(); k++)
            {
                int newPos = lists[j][k].nextNode;
                int newW = lists[j][k].weight;
                if (minDist[newPos] + newW < minDist[j])
                    ok = 0;
                if (minDist[newPos] + newW == minDist[j])
                    currOk = 1;
            }
            ok &= currOk;
        }
        if (ok)
            fprintf(fout, "DA\n");
        else
            fprintf(fout, "NU\n");

    }
    fclose(fin);
    fclose(fout);
    return 0;
}