Cod sursa(job #134458)

Utilizator crawlerPuni Andrei Paul crawler Data 11 februarie 2008 19:25:12
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <cstdio>
#include <vector>

using namespace std;

#define pb push_back

vector<int> l[50100], C[50100];
int x[50100], v[50100],k;

void DF(int nod)
{
     v[nod] = ++k;;
     for (int i=0;i<l[nod].size();++i)
     if ((!v[l[nod][i]])&&(x[nod]+C[nod][i] == x[l[nod][i]]))
     DF(l[nod][i]);     
}

void solve()
{
     int a,b,c,n,m,s;k=0;
     
     scanf("%d%d%d", &n,&m,&s);
     
     for (int i=1;i<=n;++i)
      {
              scanf("%d", &x[i]);
              v[i] = 0;
              l[i].clear();
              C[i].clear();
      }
     
     
     for (int i=1;i<=m;++i)
     {
         scanf("%d%d%d",&a,&b,&c);    
         if(a!=b)
         {
               l[a].pb(b);
               C[a].pb(c);
               l[b].pb(a);
               C[b].pb(c);
         }         
     }
     DF(s);          
     if (k==n) printf("DA\n"); else printf("NU\n");
}
 

int main()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    
    int t;
    
    scanf("%d", &t);
    
    while(t--) solve();
    
    return 0;    
}