Pagini recente » Cod sursa (job #151387) | Cod sursa (job #720981) | Cod sursa (job #1632891) | Cars | Cod sursa (job #2420164)
#include <iostream>
#include <fstream>
#include <vector>
#include <fstream>
using namespace std;
const int NMAX = 50001;
const int MMAX = 100001;
ifstream fin("distante.in");
ofstream fout("distante.out");
struct muchie
{
int nod,cost;
};
bool sol(vector<int> &d,vector<vector<muchie>> &G,int N, int M, int S)
{
vector<int> viz(N,0);
if(d[S]!=0) return false;
for(int i=0;i<N;i++)
{
for(auto edge:G[i])
if(d[i] + edge.cost < d[edge.nod]) return false;
}
viz[S]=1;
for(int i=0;i<N;i++)
{
for (auto edge:G[i])
if (d[i] + edge.cost == d[edge.nod] && !viz[edge.nod]) viz[edge.nod] = 1;
}
for(int i=0;i<N;i++)
if(!viz[i]) return false;
return true;
}
void citire()
{
int T,N,M,a,b,c,S;
fin>>T;
for(int i=0;i<T;i++)
{
fin>>N>>M>>S;
vector<vector<muchie>> G(N);
vector<int>d(N);
for(int i=0;i<N;i++)
fin>>d[i];
for(int j=0;j<M;j++)
{
fin>>a>>b>>c;
G[a-1].push_back({b-1,c});
G[b-1].push_back({a-1,c});
}
if(sol(d,G,N,M,S-1)) fout<<"DA\n";
else fout<<"NU\n";
}
}
int main() {
citire();
return 0;
}