Pagini recente » Cod sursa (job #2255275) | Cod sursa (job #1605200) | Cod sursa (job #2866454) | Cod sursa (job #2610852) | Cod sursa (job #1426920)
#include <stdio.h>
#include <vector>
#define NMAX 50001
using namespace std;
int n, m, t, start, allGood;
int intrare[NMAX], iesire[NMAX];
vector< pair<int, int> > graf[NMAX];
void solve() {
for(int i = 1; i <= n; ++i) {
for(int j = 0; j < graf[i].size(); ++j){
if(graf[i][j].second + intrare[i] == intrare[graf[i][j].first])
iesire[graf[i][j].first] = 1;
}
}
}
int main() {
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
int x, y, c;
scanf("%d", &t);
while(t--) {
for(int i = 1; i <= n; ++i) {
graf[i].clear();
iesire[i] = 0;
}
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);
graf[x].push_back(make_pair(y, c));
graf[y].push_back(make_pair(x, 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;
}