Pagini recente » Cod sursa (job #742657) | Cod sursa (job #211554) | Cod sursa (job #2115436) | Cod sursa (job #378216) | Cod sursa (job #211997)
Cod sursa(job #211997)
#include <cstdio>
#include <queue>
using namespace std;
#define MAX_N 50009
#define INF 0x3f3f3f3f
struct graf {int nod, cost;};
vector <graf> V[MAX_N];
queue <int> Q;
int N,M,K,T;
int S[MAX_N], D[MAX_N];
void citire()
{
int x,y,z;
for(int i = 1; i <= N; i++)
V[i].clear();
scanf("%d %d %d",&N,&M,&K);
for(int i = 1; i <= N; ++i)
scanf("%d",S+i);
for(int i = 1; i <= M; ++i)
{
scanf("%d %d %d",&x,&y,&z);
graf t;
t.nod = x;
t.cost = z;
V[y].push_back(t);
t.nod = y;
V[x].push_back(t);
}
}
void solve()
{
memset(D,INF,sizeof D);
Q.push(K);
D[K] = 0;
while(!Q.empty())
{
int nod = Q.front();
Q.pop();
for(typeof V[nod].begin() p = V[nod].begin(); p < V[nod].end(); p++)
if(D[p -> nod] > D[nod] + p -> cost)
{
D[p -> nod] = D[nod] + p -> cost;
Q.push(p -> nod);
}
}
for(int i = 1; i <= N; i++)
if(D[i] != S[i])
{
printf("NU\n");
return;
}
printf("DA\n");
}
int main()
{
freopen("distante.in","rt",stdin);
freopen("distante.out","wt",stdout);
scanf("%d",&T);
while(T--)
{
citire();
solve();
}
}