Pagini recente » Cod sursa (job #1894476) | Cod sursa (job #2808034) | Cod sursa (job #1175772) | Cod sursa (job #951917) | Cod sursa (job #1897795)
#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
pp P;
int dis(int s,vector <pp> arr[50003])
{
priority_queue <pp> Q;
d[s] = 0;
//prev[s] = 1;
Q.push(make_pair(0,s));
while (Q.size())
{
pp u = Q.top();
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;
if (alt < d[(*it).first])
{
d[(*it).first] = alt;
Q.push(make_pair(-d[(*it).first],(*it).first));
}
}
}
}
return 1;
}
int main() {
int t;
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
cin >> t;
while (t>0)
{
memset(d,oo,sizeof(d));
memset(pr,0,sizeof(pr));
vector <pp> arr[50003];
int m,s;
vector <int> ar;
cin >> n >> m >> s;
cout << n << m << s << endl;
for (int i=0,z;i<n;i++)
{
cin >> z;
ar.push_back(z);
}
for (int i=0;i<m;i++)
{
int a,b,c;
cin >> a >> b >> c;
// printf("%d %d %d\n",a,b,c);
arr[a-1].push_back(make_pair(b-1,c));
arr[b-1].push_back(make_pair(a-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";
t--;
}
return 0;
}