Cod sursa(job #1899523)

Utilizator edi_laitinLaitin Eduard edi_laitin Data 2 martie 2017 19:46:35
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>

using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");

vector < pair<int,int> > G[50005];
int N,M,S,D[50005],t;

void Read()
{
   fin>>N>>M>>S;
   for(int i=1;i<=N;i++)
        fin>>D[i];
   for(int i=1;i<=M;i++)
   {
       int x,y,c;
      fin>>x>>y>>c;
      G[x].push_back(make_pair(y,c));
      G[y].push_back(make_pair(x,c));
   }
}

void SolveandPrint()
{
    int flag=1;
    if(D[S]!=0) flag=0;
    for(int i=1;i<=N;i++)
    {
        int flag1=0;
        for(int j=0;j<G[i].size();j++)
        {
            int Vecin=G[i][j].first;
            if(D[i]>(D[Vecin]+G[i][j].second))
                 {
                     flag=0;
                 }
             if(D[i]==(D[Vecin]+G[i][j].second))
                flag1=1;
             if(i==S)
                flag1=1;
        }
       if(flag1==0)
         flag=0;
    }
    if(flag==1) fout<<"DA"<<"\n";
    else
        fout<<"NU"<<"\n";
}

int main()
{
    fin>>t;
    for(int z=1;z<=t;z++)
    {
        Read();
        SolveandPrint();
    }
    return 0;
}