Pagini recente » Cod sursa (job #2891144) | Cod sursa (job #1208080) | Cod sursa (job #2144207) | Cod sursa (job #3214736) | Cod sursa (job #1006217)
#include<fstream>
#include<cstring>
#define INF 1<<30
using namespace std;
int t,n,m,s,sol[50001];
bool exista[50001];
struct muchie
{
int x,y,c;
}v[100001];
ifstream fin("distante.in");
ofstream fout("distante.out");
void citire()
{
int x,y,c;
fin>>n>>m>>s;
for(int i=1;i<=n;i++)
{
fin>>sol[i];
}
for(int i=1;i<=m;i++)
{
fin>>v[i].x>>v[i].y>>v[i].c;
}
}
bool verifica()
{
if(sol[s]!=0)
return 0;
exista[s]=1;
for(int i=1;i<=m;i++)
{
if(sol[v[i].x]>sol[v[i].y]+v[i].c)
return 0;
if(sol[v[i].y]>sol[v[i].x]+v[i].c)
return 0;
if(sol[v[i].y]==sol[v[i].x]+v[i].c)
exista[v[i].y]=1;
if(sol[v[i].x]==sol[v[i].y]+v[i].c)
exista[v[i].x]=1;
}
for(int i=1;i<=n;i++)
if(!exista[i])
return 0;
return 1;
}
int main()
{
fin>>t;
for(;t>0;t--)
{
citire();
if(verifica())
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}