Cod sursa(job #1249255)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 26 octombrie 2014 18:59:10
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
using namespace std;

ifstream is("distante.in");
ofstream os("distante.out");

int T;
int N, M, S;
int a, b, c;
int D[50001];
bool Sol;
bool F[50001];

void Query();
bool Check();

int main()
{
    is >> T;
    for ( int i = 1; i <= T; ++i )
        Query();
    
    
    is.close();
    os.close();
}

void Query()
{
    is >> N >> M >> S;
    Sol = 1;

    for ( int i = 1; i <= N; ++i )
        is >> D[i];
    
    if ( D[S] ) Sol = 0;
    for ( int i = 1; i <= M; ++i )
    {
        is >> a >> b >> c;
        
        if ( D[a] + c < D[b] )
            Sol = 0;
        if ( D[b] + c < D[a] )
            Sol = 0;
        
        if ( D[a] + c == D[b] )
            F[b] = 1;
        
        if ( D[b] + c == D[a] )
            F[a] = 1;
        
    }
    if ( !Check() ) Sol = 0;
    
    if ( Sol )
        os << "DA\n";
    else
        os << "NU\n";
}

bool Check()
{
    bool Pr(1);
    for ( int i = 1; i <= N; ++i )
    {
        if ( !F[i] && i != S)
            Pr = 0;
        F[i] = 0;
    }
    return Pr;
}