Pagini recente » Cod sursa (job #2944675) | Cod sursa (job #587525) | Cod sursa (job #2893735) | Cod sursa (job #2660232) | Cod sursa (job #970475)
Cod sursa(job #970475)
#include <cstdio>
#include <vector>
#include <queue>
#include <climits>
#include <cstring>
#define SIZE 50001
using namespace std;
struct node{
int nr, cost;
} a;
int i, j, n, m, x, y, z, t, s, d[SIZE], d2[SIZE];
bool sw;
vector <node> v[SIZE];
queue <int> c;
void sursa_unica(int s)
{
for(int i=1;i<=n;++i)
d[i]=INT_MAX;
d[s]=0;
}
void dijkstra(int n)
{
c.push(s);
while(!c.empty())
{
x=c.front(); c.pop();
for(int i=0;i<v[x].size();++i)
if(d[x]+v[x][i].cost<d[v[x][i].nr])
{
d[v[x][i].nr]=d[x]+v[x][i].cost;
c.push(v[x][i].nr);
}
}
}
int main()
{
freopen("distante.in", "r", stdin);
freopen("distante.out", "w", stdout);
scanf("%d", &t);
for(i=1;i<=t;++i)
{
scanf("%d %d %d", &n, &m, &s);
sursa_unica(s);
for(j=1;j<=n;++j)
scanf("%d", &d2[j]);
for(j=1;j<=m;++j)
{
scanf("%d %d %d", &x, &y, &z);
a.cost=z; a.nr=y;
v[x].push_back(a);
}
dijkstra(n);
sw=1;
for(j=1;j<=n&&sw;++j)
if(d[j]!=d2[j]&&d[j]!=INT_MAX&&d2[j]!=0)
{
sw=0;
break;
}
if(!sw)
printf("NU\n");
else
printf("DA\n");
}
return 0;
}