Pagini recente » Cod sursa (job #1739678) | Cod sursa (job #135371) | Cod sursa (job #1618358) | Cod sursa (job #567429) | Cod sursa (job #3168117)
#include <fstream>
#include <vector>
#include <utility>
#include <set>
#define inf 100000001
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int n,m,inc,rspcomp[50001],t,i;
vector<pair<int,int>>g[50001];
void dijkstra(int incep)
{
bool viz[50001]= {};
int dist[50001]= {};
for(int j=2; j<=n; j++)
dist[j]=inf;
set<pair<int,int>>s;
s.insert({0,1});
while(!s.empty())
{
int nod = (*s.begin()).second;
int val = (*s.begin()).first;
s.erase(s.begin());
viz[nod]=1;
for(auto vecin:g[nod])
{
int nxt = vecin.first;
int c = vecin.second;
if(!viz[nxt]&&c+val<dist[nxt])
{
s.erase({dist[nxt],nxt});
dist[nxt]=c+val;
s.insert({dist[nxt],nxt});
}
}
}
bool ok=1;
for(int j=1;j<=n;j++)
if(dist[j]!=rspcomp[j])
ok=0;
if(ok==0)
cout<<"NU"<<'\n';
else
cout<<"DA"<<'\n';
}
int main()
{
cin>>t;
for(i=1; i<=t; i++)
{
cin>>n>>m>>inc;
for(int j=1; j<=n; j++)
cin>>rspcomp[j];
for(int j=1; j<=m; j++)
{
int x,y,c;
cin>>x>>y>>c;
g[x].push_back({y,c});
g[y].push_back({x,c});
}
dijkstra(inc);
for(int j=1;j<=n;j++)
g[j].clear();
}
return 0;
}