Cod sursa(job #2627116)

Utilizator aser.cobaschiCobaschi Aser aser.cobaschi Data 9 iunie 2020 20:52:16
Problema Distante Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");

const int N=50010;
int t,n,m,s,x,y,c,d[N];
vector <pair<int,int>> v[N];

int main()
{
    f>>t;
    for(;t;t--)
    {   bool da=true;
        f>>n>>m>>s;
        for(int i=1;i<=n;i++)
            f>>d[i];
        for(;m;m--)
        {
            f>>x>>y>>c;
            v[x].push_back(make_pair(y,c));
            v[y].push_back(make_pair(x,c));
            if(d[x]>d[y]+c||d[y]>d[x]+c)
            da=false;
        }
      if(d[s]!=0)
        da=false;
      for(int i=1;i<=n;i++)
      {  if(i!=s)
          {int gasit=0;
          for(auto it:v[i])
          {
              int nod,cost;
              tie(nod,cost)=it;
              if(d[nod]+cost<d[i])
                da=false;
              if(d[nod]+cost==d[i])
                gasit=1;

          }
          if(gasit==0)
            da=false;
      }
      }
     if(da==false)
                g<<"NU"<<'\n';
     else
                    g<<"DA"<<'\n';
     }    return 0;
}