Pagini recente » Cod sursa (job #2605794) | Clasament wr1 | tema | Cod sursa (job #1127173) | Cod sursa (job #2704996)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
#define NMAX 50005
#define INF 2e9
int N,M,S,T;
int a[NMAX],dist[NMAX];
priority_queue <pair <int, int > > Q;
vector < pair < int, int > > G[NMAX];
void init()
{
int i,j;
for(i=1; i<=N; i++)
{dist[i]=INF;G[i].clear();}
}
bool BFS()
{
int i;
int curr_node;
dist[S]=0;
Q.push({0,S});
while(Q.empty()==false)
{
curr_node = Q.top().second;
Q.pop();
for(auto it: G[curr_node])
{
int neigh = it.first;
int cost = it.second;
if(dist[curr_node]+cost<dist[neigh])
{
dist[neigh]=dist[curr_node]+cost;
Q.push({-dist[neigh],neigh});
}
}
}
/*for(i=1;i<=N;i++)
cout<<dist[i]<<" ";
cout<<endl;*/
for(i=1; i<=N; i++)
if(dist[i]!=a[i]) return false;
return true;
}
int main()
{
int i,j,t,x,y,c;
cin>>T;
for(t=1; t<=T; t++)
{
cin>>N>>M>>S;
for(i=1; i<=N; i++)
cin>>a[i];
init();
for(i=1; i<=M; i++)
{
cin>>x>>y>>c;
G[x].push_back({y,c});
G[y].push_back({x,c});
}
if(BFS() == true) cout<<"DA";
else cout<<"NU";
cout<<'\n';
}
return 0;
}