Pagini recente » Cod sursa (job #2965854) | Cod sursa (job #1246883) | Cod sursa (job #1185462) | Cod sursa (job #2033396) | Cod sursa (job #2753470)
#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;
}