Cod sursa(job #893553)

Utilizator TeOOOVoina Teodora TeOOO Data 26 februarie 2013 16:24:38
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#include <vector>
#include <queue>
#include <string.h>
using namespace std;

#define infinity 0x3f3f3f3f

const int sz = (int)5e4+1;

FILE *in,*out;

int num, dist[sz];


int main()
{
    in=fopen("distante.in","rt");
    out=fopen("distante.out","wt");

    fscanf(in,"%d",&num);
    while(num--)
    {
        int rFrom, rTo, rCost, nodes, edges, source;
        fscanf(in,"%d%d%d",&nodes, &edges, &source);

        for(int i=1; i<=nodes; ++i)
            fscanf(in,"%d",&dist[i]);

        bool right = (dist[source] == 0), validDist[sz];
        memset(validDist, false, sizeof(validDist));

        for(int i=1; i<=edges; ++i)
        {
            fscanf(in,"%d%d%d",&rFrom, &rTo, &rCost);
            if(dist[rFrom]+rCost < dist[rTo])
                right = false;
           if(dist[rTo]+rCost < dist[rFrom])
               right = false;

            if(dist[rFrom] + rCost == dist[rTo])
                validDist[rTo] = true;
           if(dist[rTo] + rCost == dist[rFrom])
               validDist[rFrom] = true;
        }
        validDist[source] = true;
         for(int i=1; i<=nodes; ++i)
                if(!validDist[i])
                    right = false;
        fprintf(out,"%s\n", right? "DA" : "NU");

    }


    fclose(in);
    fclose(out);
    return 0;
}