Pagini recente » Cod sursa (job #822544) | Cod sursa (job #2335329) | Cod sursa (job #616995) | Cod sursa (job #2672836) | Cod sursa (job #1426924)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NMAX 50001
using namespace std;
typedef struct nod {
int node;
int cost;
struct nod* next;
} GRAF;
int n, m, t, start, allGood;
int intrare[NMAX], iesire[NMAX];
GRAF* graf[NMAX];
void solve() {
GRAF *q;
for(int i = 1; i <= n; ++i) {
q = graf[i];
while(q) {
if(q->cost + intrare[i] == intrare[q->node])
iesire[q->node] = 1;
q = q->next;
}
graf[i] = NULL;
}
}
void newNode(int x, int y, int c) {
GRAF *q = new GRAF;
q->node = y;
q->cost = c;
q->next = graf[x];
graf[x] = q;
}
int main() {
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int x, y, c;
scanf("%d", &t);
while(t--) {
memset(iesire, 0, sizeof(int) * NMAX);
scanf("%d%d%d", &n, &m, &start);
for(int i = 1; i <= n; ++i) {
scanf("%d", &intrare[i]);
}
for(int i = 0; i < m; ++i) {
scanf("%d%d%d", &x, &y, &c);
newNode(x, y, c);
}
iesire[start] = 1;
solve();
allGood = 1;
for(int i = 1; i <= n; ++i) {
if(!iesire[i]) {
allGood = 0;
break;
}
}
printf("%s\n", allGood ? "DA" : "NU");
}
return 0;
}