Cod sursa(job #2103009)

Utilizator VladG26Ene Vlad-Mihai VladG26 Data 9 ianuarie 2018 18:15:01
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <iostream>
#include <queue>
#include <vector>
#include <cstdio>
using namespace std;
int N,M,S,viz[50005],vDistC[50005];
bool citire()
{
    int aux1,aux2,aux3;
    scanf("%d%d%d",&N,&M,&S);
    for(int i=1; i<=N; i++)
    {
        scanf("%d",&vDistC[i]);
        viz[i]=0;
    }
    if(vDistC[S])
        return false;
    viz[S]=1;
    for(int i=1; i<=M; i++)
    {
        scanf("%d%d%d",&aux1,&aux2,&aux3);
        if(vDistC[aux1]+aux3<vDistC[aux2])
            return false;
        if(vDistC[aux2]+aux3<vDistC[aux1])
            return false;
        if(vDistC[aux1]+aux3==vDistC[aux2])
        {
            viz[aux2]=1;
        }
        if(vDistC[aux2]+aux3<vDistC[aux1])
        {
            viz[aux1]=1;
        }
    }
    for(int i=1; i<=N; i++)
        if(!viz[i])
            return false;
    return true;
}
int main()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    int T;
    scanf("%d",&T);
    while(T--)
    {
        if(citire())
            printf("DA\n");
        else
            printf("NU\n");
    }
    return 0;
}