Pagini recente » Cod sursa (job #2487075) | Cod sursa (job #6965) | Cod sursa (job #3247974) | Cod sursa (job #1710507) | Cod sursa (job #2703635)
#include <bits/stdc++.h>
#define NMAX 50001
#define inf 2e9
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
int Bronzarel[NMAX],d[NMAX];
int n,m,s;
vector< pair<int,int> > adj[NMAX];
void dijkstra()
{
priority_queue< pair <int, int> > pq;
pq.push({0,s});
while(!pq.empty())
{
int u=pq.top().second;
pq.pop();
for(vector< pair<int,int> >::iterator it=adj[u].begin();it!=adj[u].end();it++)
{
int v=it->first;
int cost=it->second;
if(d[u]+cost<d[v])
{
d[v]=d[u]+cost;
pq.push({-d[v],v});
}
}
}
bool ok=true;
for(int i=1;i<=n;i++)
if(d[i]!=Bronzarel[i])
ok=false;
if(ok)
out<<"DA\n";
else
out<<"NU\n";
}
void curatenie()
{
for(int i=1;i<=n;i++)
adj[i].clear();
for(int i=1;i<=n;i++)
d[i]=inf;
d[s]=0;
}
int main()
{
int q;
in>>q;
for(int t=1;t<=q;t++)
{
in>>n>>m>>s;
for(int i=1;i<=n;i++)
in>>Bronzarel[i];
curatenie();
for(int i=1;i<=m;i++)
{
int a,b,c;
in>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
dijkstra();
}
return 0;
}