Cod sursa(job #672208)

Utilizator ioalexno1Alexandru Bunget ioalexno1 Data 1 februarie 2012 18:53:04
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
using namespace std;
const int nd=50005,inf=1999999999;
struct nod{ int val; int cost; nod *urm; }*p[nd];
int dist[nd],n,m,t,S;
int solve()
{ int i,min;
  nod *aux;
for(i=1;i<=n;++i)
    {
    if(i!=S)
    {   min=inf;
        aux=p[i];
        while(aux!=NULL)
            {
            if(dist[aux->val]+aux->cost<min)min=dist[aux->val]+aux->cost;
            aux=aux->urm;
            }
        if(min!=dist[i])return 0;
    }
    }
return 1;
}
void readData()
{ int caz,i,a,b,c;
  nod *aux;
freopen("distante.out","w",stdout);
freopen("distante.in","r",stdin); scanf("%d\n",&t);
for(caz=1;caz<=t;++caz)
    {
    scanf("%d %d %d\n",&n,&m,&S);
    for(i=1;i<=n;++i)
        {
        scanf("%d ",&dist[i]);
        p[i]=NULL;
        }
    for(i=1;i<=m;++i)
        {
        scanf("%d %d %d\n",&a,&b,&c);
        aux=new nod; aux->val=b; aux->cost=c; aux->urm=p[a]; p[a]=aux;
        aux=new nod; aux->val=a; aux->cost=c; aux->urm=p[b]; p[b]=aux;
        }
    if(solve())printf("DA\n");
        else printf("NU\n");
    }
}
int main()
{
readData();
return 0;
}