Cod sursa(job #2199137)

Utilizator ApostolIlieDanielApostol Daniel ApostolIlieDaniel Data 26 aprilie 2018 18:46:55
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>

using namespace std;

const int MAXN = 5e5;

bitset < MAXN + 1 > bit;

int dist[MAXN + 1];

int main() {
  FILE *fin, *fout;
  int t, n, m, s, i, x, y, c;
  fin = fopen ("distante.in", "r");
  fout = fopen ("distante.out", "w");
  fscanf (fin, "%d", &t);
  while (t--) {
    fscanf (fin, "%d%d%d", &n, &m, &s);
    for (i = 1; i <= n; i++)
      fscanf (fin, "%d", &dist[i]);
    for (i = 1; i <= m; i++) {
      fscanf (fin, "%d%d%d", &x, &y, &c);
      if (dist[x] + c >= dist[y] && dist[y] + c >= dist[x]) {
        if (dist[x] + c == dist[y])
          bit.set (y, 1);
        if (dist[y] + c == dist[x])
          bit.set (x, 1);
      }
    }
    if (bit.count () == n - 1 && dist[s] == 0)
      fprintf (fout, "DA\n");
    else
      fprintf (fout, "NU\n");
  }
  fclose (fin);
  fclose (fout);
  return 0;
}