Pagini recente » Cod sursa (job #2140076) | Cod sursa (job #41629) | Cod sursa (job #805896) | Cod sursa (job #2067770) | Cod sursa (job #1366111)
#include <bits/stdc++.h>
#define INF 100000000
#define DMAX 50005
#define x first
#define y second
#define pb push_back
using namespace std;
/// /// /// /// /// /// ///
///START OF DECLARATIONS///
/// /// /// /// /// /// ///
int n, m, d[DMAX], D[DMAX], t, s, x, y, c;
vector <pair<int, int> >v[DMAX];
class compare
{
public:
bool operator()(const int&a, const int &b)
{
return d[a]>d[b];
}
};
priority_queue <int, vector<int>, compare> q;
/// /// /// /// /// /// ///
/// END OF DECLARATIONS ///
/// /// /// /// /// /// ///
void dijkstra(int k)
{
for(int i=1; i<=n; i++)
d[i]=INF;
d[k]=0;
q.push(k);
while(!q.empty())
{
int x=q.top();
q.pop();
for(int i=0; i<v[x].size(); ++i)
{
pair <int, int> p=v[x][i];
if(d[p.x]> d[x]+p.y)
{
d[p.x] = d[x]+p.y;
q.push(p.x);
}
}
}
for(int i=1; i<=n; i++)
if(d[i]!=D[i])
{
printf("NU\n");
return;
}
printf("DA\n");
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
cin>>t;
for(int i=1; i<=t; i++)
{
scanf("%i %i %i", &n, &m, &s);
for(int i=1; i<=n; i++)
v[i].clear();
for(int i=1; i<=n; i++)
scanf("%i", &D[i]);
for(int i=1; i<=m; i++)
{
scanf("%i %i %i", &x, &y, &c);
v[x].pb({y, c});
v[y].pb({x, c});
}
dijkstra(s);
}
return 0;
}