Pagini recente » Cod sursa (job #1642579) | Cod sursa (job #2320090) | Cod sursa (job #2870517) | Cod sursa (job #1999368) | Cod sursa (job #1933567)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
const int Nmax=50005;
int N,M,S,T,sol;
long long D[Nmax];
vector <pair <int,int> > G[Nmax];
void read()
{
fin>>N>>M>>S;
memset(D,0,sizeof(D));
for(int i=1;i<=N;i++)
{
G[i].erase(G[i].begin(),G[i].end());
fin>>D[i];
}
for(int i=1;i<=M;i++)
{
int x,y,c;
fin>>x>>y>>c;
G[x].push_back(make_pair(y,c));
G[y].push_back(make_pair(x,c));
}
}
void solve()
{
sol=1;
for(int i=1;i<=N;i++)
{
int nod=i;
if(nod!=S)
{
int sol1=0;
for(int i=0;i<G[nod].size();i++)
{
int vecin=G[nod][i].first;
int cost=G[nod][i].second;
if(D[vecin]+cost==D[nod])
sol1=1;
if(D[nod]+cost<D[vecin])
{
sol=0;
}
}
if(!sol1)
sol=0;
}
}
}
void print()
{
if(sol)
{
fout<<"DA\n";
}
else
{
fout<<"NU\n";
}
}
int main()
{
fin>>T;
for(int t=1;t<=T;t++)
{
read();
solve();
print();
}
return 0;
}