Pagini recente » Cod sursa (job #1193718) | Cod sursa (job #1884722) | Cod sursa (job #1485626) | Cod sursa (job #811293) | Cod sursa (job #3304386)
#include <bits/stdc++.h>
#define INF 1000000009
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,p,i,j,c,d[105],m,dd[105];
struct arc
{
int nod,cost;
bool operator <(const arc& x) const{
return cost>x.cost;
}
};
priority_queue<arc>pq;
vector<arc>v[105];
bool viz[105],ok;
int main()
{
int t;
fin>>t;
while(t--)
{
ok=0;
fin>>n>>m>>p;
for(int k=1;k<=n;k++)
fin>>dd[k];
for(int k=1;k<=m;k++)
{
fin>>i>>j>>c;
v[i].push_back({j,c});
}
pq.push({p,0});
for(i=1;i<=n;i++)
d[i]=INF;
d[p]=0;
while(!pq.empty())
{
arc node=pq.top();
pq.pop();
if(viz[node.nod])
continue;
viz[node.nod]=1;
for(auto vecin:v[node.nod])
{
if(d[vecin.nod]>d[node.nod]+vecin.cost)
{
d[vecin.nod]=d[node.nod]+vecin.cost;
pq.push({vecin.nod,d[vecin.nod]});
}
}
}
for(i=1;i<=n;i++)
{
if(d[i]!=dd[i])
ok=1;
}
if(ok) fout<<"NU\n";
else fout<<"DA\n";
}
return 0;
}