Pagini recente » Cod sursa (job #319643) | Cod sursa (job #2082263) | Cod sursa (job #1783056) | Cod sursa (job #2744585) | Cod sursa (job #2830191)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
///vector <pair <int, int >>h[50005];
int T, n, m, s, d[50005], dist[50005];
/**void Djs(int start)
{
for(int i = 1; i <= n; i++)
viz[i] = 0;
for(int i = 1; i <= n; i++)
dist[i] = 2e9;
priority_queue<pair<int, int> >q;
q.push({0, start});
dist[start] = 0;
while(!q.empty())
{
int nod = q.top().second;
int cost = q.top().first;
q.pop();
if(cost > dist[nod])
continue;
for(auto j : h[nod])
if(cost + j.second < dist[j.first])
{
dist[j.first] = cost + j.second;
q.push({dist[j.first], j.first});
}
}
}*/
int main()
{
int a, b, c;
fin >> T;
for(int pas = 1; pas <= T; pas++)
{
fin >> n >> m >> s;
for(int i = 1; i <= n; i++)
fin >> d[i];
for(int i = 1; i <= n; i++)
dist[i] = 2e9;
dist[s] = 0;
for(int i = 1; i <= m; i++)
{
fin >> a >> b >> c;
dist[b] = min(dist[a] + c, dist[b]);
dist[a] = min(dist[b] + c, dist[a]);
}
int i = 1;
for( ; i <= n && d[i] == dist[i]; i++)
;
if(d[i] != dist[i])
fout << "NU\n";
else
fout << "DA\n";
}
return 0;
}