Pagini recente » Mozaic | Profil PetrescuBianca | Statistici Otel Andrei Eusebiu (eusebiua) | Statistici Elena Dulgheru (elena_d) | Cod sursa (job #1580946)
#include<iostream>
#include<queue>
#include<fstream>
#include<vector>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
queue <int> q;
vector <pair< int, int> > a[100010];
int cost[100010];
int n,m,t,s;
void dijkstra(int w)
{
int nod,b,c;
q.push(w);
while (!q.empty())
{
nod=q.front();
for (int i=0;i<a[nod].size();i++)
{
b=a[nod][i].first;
c=a[nod][i].second;
if (cost[b]>cost[nod]+c || cost[b]==0)
{
cost[b]=cost[nod]+c;
q.push(b);
}
}
q.pop();
}
}
int main ()
{
fin>>t;
while (t!=0)
{
t--;
fin>>n>>m>>s;
int rez[n];
for (int i=0;i<n;i++)
{
fin>>rez[i];
}
for (int i=1;i<=m;i++)
{
int x,y,z;
fin>>x>>y>>z;
a[x].push_back(make_pair(y,z));
}
dijkstra(s);
int ok=1;
for (int i=0;i<n;i++)
{
if (cost[i+1]!=rez[i])
ok=0;
}
if (ok==1)
{
fout<<"DA";
}
else
{
fout<<"NU";
}
fout<<"\n";
}
}