Pagini recente » Cod sursa (job #1881958) | Cod sursa (job #1039479) | Cod sursa (job #239207) | Cod sursa (job #2183055) | Cod sursa (job #2564439)
#include<bits/stdc++.h>
#include<string.h>
using namespace std;
#define NMAX 100005
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,s;
vector<pair<int,int > > ma[NMAX];
int dis[NMAX];
void citire()
{
for(int i=1;i<=n;i++)
{
if(!ma[i].empty())
ma[i].clear();
}
fin>>n>>m>>s;
for(int i=1;i<=n;i++)
fin>>dis[i];
for(int i=1;i<=m;i++)
{
int x,y,c;
fin>>x>>y>>c;
ma[x].push_back(make_pair(y,c));
ma[y].push_back(make_pair(x,c));
}
}
void rezolva()
{
int ok = 1;
if(dis[s] != 0)
ok = 0;
vector<int> exista(n+1,0);
for(int i = 1;i<=n;i++)
{
for(int j=0;j<ma[i].size();j++)
{
int vecin = ma[i][j].first;
int cost = ma[i][j].second;
if(dis[i] + cost == dis[vecin])
{
exista[vecin] = 1;
}
else if(dis[i] + cost < dis[vecin])
ok = 0;
}
}
for(int i=1;i<=n;i++)
{
if(i!=s && !exista[i])
ok = 0;
}
if(!ok)
fout<<"NU"<<'\n';
else
fout<<"DA"<<'\n';
}
int main()
{
int t;
fin>>t;
for(int i=1;i<=t;i++)
{
citire();
rezolva();
}
}