Cod sursa(job #2103625)

Utilizator stefanchistefan chiper stefanchi Data 10 ianuarie 2018 16:05:44
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#define NMAX 50010
using namespace std;
int dist_min[NMAX];
int viz[NMAX];

int graf_read(int m, int n)
{
    int x,y,c;
    for(int i = 0 ; i < m ; i++)
    {
        scanf("%d %d %d",&x,&y,&c);
        if(dist_min[y] > dist_min[x] + c || dist_min[x] > dist_min[y] + c)
            return 0;
        if(dist_min[y] == dist_min[x] + c)
            viz[y] = 1;
        if(dist_min[x] == dist_min[y] + c)
            viz[x] = 1;
    }
    for(int i = 1 ; i <= n ; i++)
        if(viz[i] == 0)
            return 0;
    return 1;
}

void reset(int n)
{
    for(int i = 1 ; i <=n  ; i++)
        viz[i] = 0;
}
void read()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    int n,m,s,t;
    scanf("%d",&t);
    for(int i = 0 ; i < t ; i++)
    {
        scanf("%d %d %d",&n,&m,&s);
         reset(n);
        viz[s] = 1;
        for(int j = 1 ; j <= n ; j++)
            scanf("%d",&dist_min[j]);
        if(graf_read(m,n) == 0)
            printf("NU\n");
        else
            printf("DA\n");
    }
}

int main()
{
    read();
    return 0;
}