Cod sursa(job #1224358)

Utilizator DjokValeriu Motroi Djok Data 30 august 2014 18:11:33
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream>
#include<algorithm>
#include<cstring>
using namespace std;

typedef struct lnod {
      int info,c;
      lnod *next;
}*nod;

int t,n,m,s,i,d[50005],x,y,c;
nod lda[50005];
bool u,viz[50005];

void add(int x,nod &y,int z) {
    nod p=new lnod;
    p->info=x;
    p->c=z;
    p->next=y;
    y=p;
}

int main()
{
  ifstream cin("distante.in");
  ofstream cout("distante.out");

  cin>>t;
  while(t--)
  {
    memset(lda,0,sizeof(lda));
    memset(viz,0,sizeof(viz));
    cin>>n>>m>>s; viz[s]=1;
    for(i=1;i<=n;++i) cin>>d[i];
    u=(d[s]) ? 1:0;
    for(i=1;i<=m && !u;++i)
    cin>>x>>y>>c,add(y,lda[x],c),add(x,lda[y],c);

    for(i=1;i<=n && !u;++i)
     for(nod p=lda[i];p && !u;p=p->next)
    { 
      if(d[i]+p->c<d[p->info]) u=1;
      if(d[p->info]+p->c<d[i]) u=1;
      if(d[i]==d[p->info]+p->c) viz[i]=1;
      if(d[p->info]==d[i]+p->c) viz[p->info]=1;
    }
               
    for(i=1;i<=n && !u;++i)
    if(!viz[i]) u=1;

    if(u) cout<<"NU\n"; else cout<<"DA\n";
  }

 return 0;
}