Pagini recente » Cod sursa (job #2765077) | Cod sursa (job #725504) | Cod sursa (job #2286557) | Cod sursa (job #3186000) | Cod sursa (job #3188072)
#include <fstream>
#include <vector>
#include <queue>
#include <ios>
#define inf 0x3f3f3f3f
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int t,n,m,p,d[50002];
struct comp{
bool operator()(int a,int b){
return d[a]>d[b];
}
};
void dij(int start,int aux[],priority_queue<int,vector<int>,comp>Q,vector<pair<int,int>>V[]){
int v[n+2]={0};
Q.push(start);
for(int i=1;i<=n;++i)
d[i]=inf;
d[start]=0;
v[start]=1;
while(!Q.empty()){
int val=Q.top();
Q.pop();
v[val]=0;
for(int i=0;i<V[val].size();++i){
int vec=V[val][i].first;
int cost=V[val][i].second;
if(d[vec]>d[val]+cost){
d[vec]=d[val]+cost;
if(!v[vec]) v[vec]=1,Q.push(vec);
}
}
}
int da=1;
for(int i=1;i<=n && da;++i){
if(d[i]==inf) d[i]=0;
if(d[i]!=aux[i]) da=0;
}
if(da) cout<<"DA"<<'\n';
else cout<<"NU"<<'\n';
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin>>t;
for(int k=1;k<=t;++k){
cin>>n>>m>>p;
int aux[n+2];
vector<pair<int,int>>V[n+2];
priority_queue<int,vector<int>,comp>Q;
for(int i=1;i<=n;++i) cin>>aux[i];
for(int i=1;i<=m;++i){
int x,y,z;
cin>>x>>y>>z;
V[x].push_back(make_pair(y,z));
}
dij(p,aux,Q,V);
}
return 0;
}