Cod sursa(job #1090548)

Utilizator bia423Bianca Floriana bia423 Data 22 ianuarie 2014 19:50:25
Problema Distante Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <iostream>
#include <fstream>
using namespace std;
const int nm=50001;
const int mm=100001;
const int inf=1<<30;
ifstream in("distante.in");
ofstream out("distante.out");
struct lista
{ int v;
  int c;
  lista * urm ;

};
lista *cap[nm],*nou;
int d[nm],coada[mm],n,m,dm[nm];
void dj(int s)
{ int pi=1,ps=1,i;
    for(i=1;i<=n;i++)
        d[i]=inf;
    d[s]=0;
    coada[1]=s;
    while(pi<=ps)
    { nou=cap[coada[pi]];
        while(nou)
            {if(d[nou->v]>d[coada[pi]]+nou->c)
        { ps++;
        d[nou->v]=d[coada[pi]]+nou->c;
        coada[ps]=nou->v;
            } nou=nou->urm; } pi++;

    }

}







int main()
{   int a,b,c,s,t,i,j;
    in>>t;
    for(j=1;j<=t;j++)
    {   in>>n>>m>>s;
        for(i=1;i<=n;i++)
            {in>>a;dm[i]=a;}
        for(i=1;i<=m;i++)
        {in>>a>>b>>c;
            nou=new lista;
            nou->v=b;
            nou->c=c;
            nou->urm=cap[a];
            cap[a]=nou;
            nou=new lista;
            nou->v=a;
            nou->c=c;
            nou->urm=cap[b];
            cap[b]=nou;
        }
    dj(s);a=0;
    for(i=1;i<=n;i++)
        if(d[i]!=dm[i])a=1;
       if(a==0)out<<"DA"<<"\n";
       else out<<"NU"<<"\n";
/*for(i=1;i<=n;i++)
    {    nou=cap[i];
        while(nou!=NULL)
        {   out<<nou->v<<" ";
            nou=nou->urm;
        }
        out<<"\n";
    }*/
      for(i=1;i<=n;i++)
   cap[i]=NULL;


   }

    return 0;
}