Cod sursa(job #775325)

Utilizator gicu_01porcescu gicu gicu_01 Data 7 august 2012 20:04:33
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int v[4][200010];
int a[50010];
int n,m,s,T;

int djikastra(int nod)
{
    int i,b;
    b=1;
    for (i=1; i<=m; i++)
     if (a[v[2][i]]>a[v[1][i]]+v[3][i])
     {
         a[v[2][i]]=a[v[1][i]]+v[3][i];
         b=0;
         break;
     }
     if (a[nod]!=0) b=0;
    return b;
}

int main()
{
    int i,j;
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    scanf("%i",&T);
    for (i=1; i<=T; i++)
    {
        scanf("%i%i%i",&n,&m,&s);
        for (j=1; j<=n; ++j) scanf("%i",&a[j]);
        for (j=1; j<=m*2; ++j)
         if ( j%2==1 ) scanf("%i%i%i",&v[1][j],&v[2][j],&v[3][j]);
         else {
           v[1][j]=v[2][j-1];
           v[2][j]=v[1][j-1];
           v[3][j]=v[3][j-1];
         }
        if ( djikastra(s) ) printf("DA\n"); else printf("NU\n");
    }
    return 0;
}