Pagini recente » Cod sursa (job #2260746) | Cod sursa (job #2492364) | Cod sursa (job #377514) | Cod sursa (job #265557) | Cod sursa (job #1344943)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int N,M,D[50005],S;
vector <int> G[50005],Cost[50005];
bool Exist[50005],ok=1;
void Read()
{
f>>N>>M>>S;
for(int i=1;i<=N;i++)
f>>D[i];
for(int i=1;i<=M;i++)
{
int x,y,c;
f>>x>>y>>c;
if(D[x]+c<D[y] || D[y]+c<D[x])
ok=0;
if(D[x]+c==D[y])
Exist[y]=1;
if(D[y]+c==D[x])
Exist[x]=1;
}
}
int Solve()
{
if(D[S]!=0)
return 0;
if(ok==0)
return 0;
for(int i=1;i<=N;i++)
{
if(i==S)
continue;
if(Exist[i]==0)
return 0;
}
return 1;
}
int main()
{
int T;
f>>T;
while(T--)
{
ok=1;
Read();
int ok=Solve();
if(ok==1)
g<<"DA\n";
else
g<<"NU\n";
for(int i=1;i<=N;i++)
{
G[i].clear();
Cost[i].clear();
}
memset(Exist,0,sizeof(Exist));
}
return 0;
}