Pagini recente » Cod sursa (job #3004635) | Cod sursa (job #2873762) | Cod sursa (job #1116291) | Cod sursa (job #1317865) | Cod sursa (job #2367651)
#include <bits/stdc++.h>
#define cst first
#define nod second
#define INF 1000000000
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,k;
int solutie[50005];
int cost[50005];
int viz[50005];
vector < pair <int,int> > mv[50005];
priority_queue < pair <int,int>, vector < pair <int,int> >, greater < pair <int,int> > > pq;
void dijkstra(int p){
int i,vecin;
pair <int,int> x;
cost[p]=0;
pq.push(make_pair(0,p));
while(!pq.empty()){
x=pq.top();
vecin=x.nod;
pq.pop();
if(viz[vecin])
continue;
viz[vecin]=1;
for(i=0;i<mv[vecin].size();i++)
if(cost[mv[vecin][i].nod]>mv[vecin][i].cst+cost[vecin]){
cost[mv[vecin][i].nod]=mv[vecin][i].cst+cost[vecin];
pq.push(make_pair(cost[mv[vecin][i].nod],mv[vecin][i].nod));
}
}
}
int main(){
int i,x,y,c,j,ok;
fin>>t;
for(i=1;i<=t;i++){
fin>>n>>m>>k;
ok=1;
for(j=0;j<50004;j++)
mv[j].clear();
for(j=1;j<=n;j++)
fin>>solutie[j];
for(j=1;j<=n;j++){
cost[j]=INF;
viz[j]=0;
}
for(j=1;j<=m;j++){
fin>>x>>y>>c;
mv[x].push_back(make_pair(c,y));
mv[y].push_back(make_pair(c,x));
}
dijkstra(k);
for(j=1;j<=n;j++)
if(cost[j]!=solutie[j])
ok=0;
if(ok)
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}