Cod sursa(job #2817042)

Utilizator gavrilp@yahoo.comPetru Florin Gavril [email protected] Data 12 decembrie 2021 18:46:45
Problema Distante Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<iostream>
#include <fstream>
#include<cstring>
#include<cstdlib>
using namespace std;
int n,m,t,c[100000000],d[50001],ma[20000][20000];
long long suma[1001];
void bellman(int x)
{   int i;
    for(i=1;i<=n;i++)
        d[i]=1000000000;
    d[x]=-1;
    c[1]=x;
    int p=1,u=1;
    while(p<=u)
    {
        x=c[p++];
        for(i=1;i<=n;i++)
         if(d[x]+ma[x][i]<d[i])
          {
             d[i]=d[x]+ma[x][i];
             c[++u]=i;
          }
    }
}
void citire_solutie()
{
    ifstream fin("distante.in");
    ofstream fout("distante.out");
    fin>>t;
    int dist[50001],s;
    for(int i=1;i<=t;i++)
    {
        fin>>n>>m>>s;
        for(int lin=1;lin<=n;lin++)
            for(int col=1;col<=n;col++)
               ma[lin][col]=1000000000;
        for (int j=1;j<=n;j++)
            fin>>dist[j];
        for(int i=1;i<=m;i++)
        {
            int a,b,c;
            fin>>a>>b>>c;
            ma[a][b]=ma[b][a]=c;
        }
        bellman(s);
        int ok=1;
        for(int j=1;j<=n&&ok==1;j++)
            if(dist[j]!=d[j]+1)
              ok=0;
        if(ok)
            fout<<"DA"<<'\n';
        else
            fout<<"NU"<<'\n';
    }
    fin.close();
    fout.close();
}


int main()
{
  citire_solutie();
  return 0;
}