Pagini recente » Cod sursa (job #432982) | Cod sursa (job #386214) | Cod sursa (job #1211899) | Cod sursa (job #633374) | Cod sursa (job #1897018)
#include <bits/stdc++.h>
using namespace std;
#define pp pair<int,int>
int n;
//vector <pp> arr[50003];
int pr[50001];
int d[50001];
#define oo 1000000
priority_queue <pp> Q;
pp P;
int dis(int s,vector <pp> arr[50003])
{
d[s] = 0;
//prev[s] = 1;
for (int i=0;i<n;i++)
{
if (i != s)
{
pr[i] = 0;
d[i] = oo;
}
// Q.push(make_pair(i,-d[i]));
}
Q.push(make_pair(0,s));
while (Q.size())
{
pp u = Q.top();
//cout << u.first<< endl << endl;
Q.pop();
if (pr[u.second] == 0)
{
pr[u.second] = 1;
vector <pp> :: iterator it = arr[u.second].begin(),
sf = arr[u.second].end();
for (;it != sf;++it)
{
int alt = -u.first + (*it).second;
// printf("d init:%d %d %d %d\n",d[(*it).first],u.first,(*it).second,(*it).first);
if (alt < d[(*it).first])
{
d[(*it).first] = alt;
// prev[(*it).first] = u.first;
// cout << endl << "mp:" << (*it).first << endl;
Q.push(make_pair(-d[(*it).first],(*it).first));
}
}
}
}
return 1;
}
int main() {
// your code goes here
int t;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
cin >> t;
while (t--)
{
vector <pp> arr[50003];
int m,s;
vector <int> ar;
cin >> n >> m >> s;
for (int i=0,z;i<n;i++)
{
cin >> z;
ar.push_back(z);
}
for (int i=0;i<n;i++)
{
int a,b,c;
cin >> a >> b >> c;
arr[a-1].push_back(make_pair(b-1,c));
}
dis(s-1,arr);
bool bul = true;
for (int i=0;i<ar.size();i++)
{
// cout << d[i] << " ";
if (ar[i] != d[i])
bul = false;
}
if (bul)
cout << "DA\n";
else cout << "NU\n";
// arr.clear();
}
return 0;
}