Pagini recente » Cod sursa (job #2247860) | Cod sursa (job #911391) | Cod sursa (job #1943078) | Cod sursa (job #614152) | Cod sursa (job #899947)
Cod sursa(job #899947)
#include <cstdio>
# include <vector>
# include <queue>
#define MAXINT 0x7FFFFFFF
using namespace std;
vector < pair <int, int> > v[50010];
int d[50010],i,j,a,b,c,n,m,s,d1[50010],t,p;
bool ok;
struct comp
{
bool operator () (const int &x, const int &y)
{
return (d[x]>d[y]);
}
};
priority_queue <int, vector <int>, comp> q;
void bellmanford(int nod, int d[])
{
int i;
for (i=0; i<=n; i++)
d[i]=MAXINT;
d[nod]=0;
q.push(nod);
while (!q.empty())
{
int k=q.top();
q.pop();
for (i=0; i<v[k].size(); ++i)
{
int vecin=v[k][i].second;
int cost=v[k][i].first;
if (d[vecin]>d[k]+cost)
{
d[vecin]=d[k]+cost;
q.push(vecin);
}
}
}
}
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d\n",&t);
for (p=1; p<=t; p++)
{
scanf("%d %d %d\n",&n,&m,&s);
for (i=1; i<=n; i++)
v[i].clear();
for (i=1; i<=n; i++)
scanf("%d ",&d1[i]);
for (i=1; i<=m; i++)
{
scanf("%d %d %d\n",&a,&b,&c);
v[a].push_back(make_pair(c,b));
}
bellmanford(s,d);
ok=true;
for (i=1; i<=n; i++)
if (d[i]!=d1[i])
{
printf("NU\n");
ok=false;
break;
}
if (ok==true)
printf("DA\n");
}
return 0;
}