Cod sursa(job #2103717)

Utilizator maria_sinteaMaria Sintea maria_sintea Data 10 ianuarie 2018 18:12:11
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <cstdio>
#define NMAX 50010
using namespace std;
int dist_min[NMAX];
int viz[NMAX];

int graf_read(int m, int n, int s)
{
    int x,y,c;
    if(dist_min[s] != 0)
        return 0;
    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,s) == 0)
            printf("NU\n");
        else
            printf("DA\n");
    }
}

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