Pagini recente » Cod sursa (job #2285140) | Cod sursa (job #924947) | Cod sursa (job #1599951) | Cod sursa (job #1398527) | Cod sursa (job #2761121)
///#include <iostream>
#include <fstream>
#include <set>
const int SIZE = 5e4+10,
INF = 1e8;
using namespace std;
ifstream cin("distante.in");
ofstream cout("distante.out");
int t, n, m, start;
int dists[SIZE], d[SIZE];
set <pair<int, int>> v[SIZE];
void reset()
{
for(int i=1; i<=n; i++)
d[i]=INF, v[i].clear();
}
void cinGraph()
{
int y, x, c;
for(int i=1; i<=m; i++)
{
cin>>y>>x>>c;
v[y].insert({c, x});
v[x].insert({c, y});
}
}
void dijkstra()
{
int nod, nxt;
pair <int, int> cnod;
set <pair<int, int>> q;
q.insert({0, start});
d[start]=0;
while(!q.empty())
{
cnod=*q.begin();
q.erase(q.begin());
nod=cnod.second;
for(auto cnxt : v[nod])
{
nxt=cnxt.second;
if(d[nxt]>d[nod]+cnxt.first)
d[nxt]=d[nod]+cnxt.first,
q.insert({d[nxt], nxt});
}
}
}
bool check()
{
for(int i=1; i<=n; i++)
if(dists[i]!=d[i])
return 0;
return 1;
}
int main()
{
cin>>t;
while(t--)
{
cin>>n>>m>>start;
reset();
for(int i=1; i<=n; i++)
cin>>dists[i];
cinGraph();
dijkstra();
if(check()) cout<<"DA\n";
else cout<<"NU\n";
}
return 0;
}