Pagini recente » Cod sursa (job #676365) | Cod sursa (job #188000) | Cod sursa (job #2773188) | Cod sursa (job #2200185) | Cod sursa (job #412683)
Cod sursa(job #412683)
#include<fstream>
#include<vector>
#include<queue>
#define NMAX 50004
#define inf 2000000000
#define pb push_back
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
vector<int>A[NMAX],C[NMAX];
queue<int>q;
int t,n,m,i,it,d[NMAX],dz[NMAX],s,x,y,z;
int corect()
{int i;
for (i=1;i<=n;i++)
if (d[i]!=dz[i]) return 0;
return 1;}
int main()
{
fin>>t;
for (it=1;it<=t;it++)
{
fin>>n>>m>>s;
for (i=1;i<=n;i++)
fin>>dz[i];
for (i=1;i<=m;i++)
{
fin>>x>>y>>z;
A[x].pb(y);
A[y].pb(x);
C[x].pb(z);
C[y].pb(z);
}
for (i=1;i<=n;i++)
d[i]=inf;
d[s]=0;
q.push(s);
while (!q.empty())
{
x=q.front();
for (i=0;i<A[x].size();i++)
if (d[A[x][i]]>d[x]+C[x][i])
{
d[A[x][i]]=d[x]+C[x][i];
q.push(A[x][i]);
}
q.pop();
}
if (corect())
fout<<"DA"<<'\n';
else
fout<<"NU"<<'\n';
for (i=1;i<=n;i++)
while (!A[i].empty())
{
A[i].erase(A[i].begin());
C[i].erase(C[i].begin());
}
}
fout.close();
return 0;}