Pagini recente » Cod sursa (job #2087541) | Cod sursa (job #439221) | Cod sursa (job #248022) | Cod sursa (job #1783884) | Cod sursa (job #3344175)
#include <bits/stdc++.h>
#define fi first
#define se second
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int t,n,m,i,j,a,b,c,s,dinit[50002],d[50002];
vector<pair<int,int>>v[50002];
void dijk(int st){
for(int i=1;i<=n;i++){
d[i]=1e9;
}
priority_queue<pair<int,int>,vector<pair<int,int>>,greater<pair<int,int>>>PQ;
PQ.push({0,st});
d[st]=0;
while(!PQ.empty()){
tie(a,b)=PQ.top();
PQ.pop();
if (a>d[b])continue;
for (auto it:v[b]){
if (d[it.se]>d[b]+it.fi){
d[it.se]=d[b]+it.fi;
PQ.push({d[it.se],it.se});
}
}
}
for (int i=1;i<=n;i++){
if (d[i]!=dinit[i]){
g<<"NU\n";
return;
}
}
g<<"DA\n";
}
int main()
{ f>>t;
while(t--){
f>>n>>m>>s;
for(i=1;i<=n;i++){
f>>dinit[i];
}
for(i=1;i<=m;i++){
f>>a>>b>>c;
v[a].push_back({c,b});
v[b].push_back({c,a});
}
dijk(s);
for (i=1;i<=n;i++){
v[i].clear();
}
}
return 0;
}