Pagini recente » Cod sursa (job #2230727) | Cod sursa (job #1047142) | Cod sursa (job #794495) | Cod sursa (job #459816) | Cod sursa (job #1757829)
#include <bits/stdc++.h>
#define pb(x) push_back(x)
#define mp make_pair
#define pii pair< int , int >
#define f first
#define s second
#define Nmax 50002
FILE *fin = freopen("distante.in", "r", stdin);
FILE *fout = freopen("distante.out", "w", stdout);
using namespace std;
int T, n, m, s, d[Nmax];
vector <pii> G[Nmax];
bitset <Nmax> b;
void initial()
{
b.reset();
for(int i = 1; i <= n; ++ i)
G[i].clear();
}
void read()
{
int x, y, c;
scanf("%d %d %d", &n, &m, &s);
for(int i = 1; i <= n; ++ i)
scanf("%d", &d[i]);
while(m --)
{
scanf("%d %d %d", &x, &y, &c);
G[x].pb(mp(y, c));
G[y].pb(mp(x, c));
}
}
bool solve()
{
if(d[s] != 0) return 0;
b.set(s);
for(int i = 1; i <= n; ++ i)
{
for(int j = 0; j < G[i].size(); ++ j)
{
if(d[i] > d[G[i][j].f] + G[i][j].s)
return 0;
if(d[i] == d[G[i][j].f] + G[i][j].s)
b.set(i);
}
if(!b.test(i)) return 0;
}
}
int main()
{
scanf("%d", &T);
while(T --)
{
initial();
read();
if(solve())
printf("DA\n");
else printf("NU\n");
}
return 0;
}