Pagini recente » Cod sursa (job #1408828) | Cod sursa (job #3037054) | Cod sursa (job #2352135) | Cod sursa (job #1629116) | Cod sursa (job #3330882)
// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define err(...) fprintf(stderr, __VA_ARGS__)
using ll=long long;
using dbl=long double;
constexpr int NMAX=50'005;
constexpr ll MOD=1'000'000'007;
int N, M, S;
int d[NMAX];
std::vector<int> G[NMAX];
bool check()
{
if(d[S])
return 0;
std::queue<int> q;
int cnt=N-1;
q.push(S);
d[S]=-1;
do
{
S=q.front();
q.pop();
for(int x : G[S])
if(d[x]!=-1)
{
q.push(x);
d[x]=-1;
--cnt;
}
}while(!q.empty());
return !cnt;
}
int main()
{
FILE* f=fopen("distante.in", "r"), *g=fopen("distante.out", "w");
int _, i, a, b, c;
fscanf(f, "%d", &_);
do
{
fscanf(f, "%d%d%d", &N, &M, &S);
--S;
for(i=0;i<N;++i)
fscanf(f, "%d", d+i);
for(i=0;i<M;++i)
{
fscanf(f, "%d%d%d", &a, &b, &c);
--a;
--b;
if(d[a]+c==d[b])
G[a].push_back(b);
if(d[b]+c==d[a])
G[b].push_back(a);
}
if(check())
fprintf(g, "DA\n");
else
fprintf(g, "NU\n");
for(i=0;i<N;++i)
{
G[i].clear();
G[i].shrink_to_fit();
}
}while(--_);
fclose(f);
fclose(g);
return 0;
}