Pagini recente » Cod sursa (job #1705328) | Cod sursa (job #546656) | Cod sursa (job #1226849) | Cod sursa (job #2443862) | Cod sursa (job #3327886)
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define pii pair<ll,ll>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
struct compare
{
bool operator()(pii a,pii b)const
{
return a.second>b.second;
}
};
ll dist[50001],dp[50001];
vector<pii>v[50001];
void dijkstra(int nod)
{
priority_queue<pii,vector<pii>,compare>pq;
dp[nod]=0;
pq.push({nod,0});
while(!pq.empty())
{
pii t=pq.top();
pq.pop();
for(pii i:v[t.first])
if(t.second+i.second<dp[i.first])
{
dp[i.first]=t.second+i.second;
pq.push({i.first,dp[i.first]});
}
}
}
void solve()
{
int n,m,s,st,dr,cost;
fin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
v[i].clear();
fin>>dist[i];
dp[i]=1e9;
}
while(m--)
{
fin>>st>>dr>>cost;
v[st].pb({dr,cost});
v[dr].pb({st,cost});
}
dijkstra(s);
bool ok=1;
for(int i=1;i<=n;i++)
{
if(dp[i]!=dist[i])
{
ok=0;
break;
}
}
if(ok)
fout<<"DA\n";
else fout<<"NU\n";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int t;
fin>>t;
while(t--)
solve();
return 0;
}