Pagini recente » Cod sursa (job #2283100) | Cod sursa (job #1043920) | Cod sursa (job #2201830) | Cod sursa (job #799567) | Cod sursa (job #2713052)
#include <bits/stdc++.h>
#define inf 2000000000
using namespace std;
ifstream ci("distante.in");
ofstream cou("distante.out");
struct date{
int x,c;
};
int t,n,m,s;
int d[50005];
int dp[50005];
vector<date>v[50005];
queue<int>q;
void rst(){
for(int i=1;i<=n;i++){
dp[i]=inf;
}
dp[s]=0;
}
void Djakstra(int r){
q.push(r);
int w,w1;
while(!q.empty()){
w=q.front();
q.pop();
for(auto i:v[w]){
if(dp[i.x]>dp[w]+i.c){
dp[i.x]=dp[w]+i.c;
q.push(i.x);
}
}
}
}
void verif(){
for(int i=1;i<=n;i++){
if(d[i]!=dp[i]){
cou<<"NU \n";
return;
}
}
cou<<"DA \n";
}
void citire(){
ci>>t;
while(t--){
ci>>n>>m>>s;
for(int i=1;i<=n;i++){
ci>>d[i];
}
rst();
int a,b,c;
for(int i=1;i<=m;i++){
ci>>a>>b>>c;
date t;
t.x=b;
t.c=c;
v[a].push_back(t);
t.x=a;
v[b].push_back(t);
}
Djakstra(s);
verif();
//cout<<"\n\n";
}
}
int main()
{
citire();
return 0;
}