Pagini recente » Cod sursa (job #1826856) | Cod sursa (job #1524705) | Cod sursa (job #589768) | Cod sursa (job #1941574) | Cod sursa (job #1370167)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
struct Nod{int inf,val;Nod*leg;};
typedef Nod* nod;
nod L[50001];
queue<int> Q;
int cost[50001],n,m,v2[50001],v;
/*void add(int x, int y, int val)
{
nod p=new Nod;
p->inf=y;
p->leg=L[x];
p->val=val;
L[x]=p;
}
*/
void verif(){
for(int i=1; i<=n; i++)
if(cost[i]!=v2[i]){
fout<<"NU\n";
return;
}
fout<<"DA\n";
}
void citire_graf()
{
int i,x,y,val;
fin>>n>>m>>v;
for(i=1;i<=n; i++) {/*L[i]=NULL;*/cost[i]=999999999;}
cost[v]=0;
for(i=1; i<=n; i++) fin>>v2[i];
for(i=1; i<=m; i++)
{
fin>>x>>y>>val;
if(cost[y]>cost[x]+val)
cost[y]=cost[x]+val;
if(cost[x]>cost[y]+val)
cost[x]=cost[y]+val;
}
}
/*
void dj(int v)
{
cost[v]=0;
Q.push(v);
while( !Q.empty() )
{
for(nod q=L[Q.front()];q;q=q->leg)
if(cost[q->inf]>cost[Q.front()]+q->val)
{
cost[q->inf]=cost[Q.front()]+q->val;
Q.push(q->inf);
}
Q.pop();
}
}
*/
int main()
{
int t,i;
fin>>t;
for(i=1; i<=t; i++)
{
citire_graf();
//dj(v);
verif();
}
return 0;
}