Cod sursa(job #2655598)

Utilizator razvan1403razvan razvan1403 Data 4 octombrie 2020 21:49:47
Problema Distante Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define l long
#define in int
#define fo(i, n) for (i = 0; i < n; i++)
#define si(x) scanf('%d', &x)
#define sl(x) scanf('%lld', &x)
#define ss(s) scanf('%s', s) 
#define pi(x) printf('%d', x)
#define pl(x) printf('%lld', x)
#define ps(s) printf('%s', s) 
#define pb push_back 
#define mp make_pair 
#define F first 
#define S second 
#define all(x) x.begin(), x.end() 
#define clr(x) memset(x, 0, sizeof(x))
#define sortall(x) sort(all(x)) 
typedef pair<int, int> pii; 
typedef pair<ll, ll> pl; 
typedef vector<int> vi; 
typedef vector<ll> vl; 
typedef vector<pii> vpii;
#define INF 1000000000
#define NMAX 50003
string file = "distante";
//ifstream fin("citire.in");
ifstream fin(file+".in");
ofstream fout(file+".out");

int n,m,a,b,c,d[NMAX],f[NMAX],s,t;
int ok,i;

int main()
{
    fin>>t;
    for(;t--;)
    {
        fin>>n>>m>>s;
        for(i=1;i<=n;i++){fin>>d[i];f[i]=0;}ok=0;f[s]=1;
        for(i=1;i<=m;i++)
        {
            fin>>a>>b>>c;
            if(d[a]>d[b]) swap(a,b);
            if(d[b]==d[a]+c) f[b]=1;
            if(d[b]>d[a]+c) ok=1;
        }
        for(i=1;i<=n;i++) if(!f[i]) ok=1;
        if(ok==1) fout<<"NU\n";
        else fout<<"DA\n";
    }
    return 0;
}