Cod sursa(job #2870610)

Utilizator Alecu123Alexandra Alecu123 Data 12 martie 2022 14:22:19
Problema Distante Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <fstream>

#define N 1005
#define oo 1e9
using namespace std;

ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,a[N][N];

int x;
int D[N];

bool viz[N];

int nod[N];



void Dijkstra(int x)

{



    int dmin,nod,i,j;

    for(int i=1;i<=n;i++) D[i]=a[x][i];

    viz[x]=1;

    for(int i=1;i<n;i++)

    {



      dmin=oo;

      for(int j=1;j<=n;j++)

        if(!viz[j] && D[j]<dmin)

        {

          dmin=D[j];

          nod=j;

        }

        if(dmin==oo) break;

        else

        {



            viz[nod]=1;

            for(int j=1;j<=n;j++)

                if(!viz[j] && D[nod]+a[nod][j]<D[j])

                    D[j]=D[nod]+a[nod][j];

        }

    }

}

bool Afisare()

{



    for(int i=1;i<=n;i++)

        if(D[i]!=nod[i]) return 0;

    return 1;

}





void Citire()

{



    int y,z,c;

    fin>>t;

    for(int k=1;k<=t;k++)

       {fin>>n>>m>>x;

        for(int i=1;i<=n;i++) fin>>nod[i];

        for(int i=1;i<=n;i++)

            for(int j=1;j<=n;j++)

                if(i==j) a[i][j]=0;

                else a[i][j]=oo;

        for(int i=1;i<=m;i++)

          {

            fin>>y>>z>>c;

            a[y][z]=a[z][y]=c;



          }

         Dijkstra(x);

        if(Afisare()) fout<<"DA";

        else fout<<"NU";

        fout<<"\n";



        for(int i=1;i<=n;i++)

        {

            viz[i]=0;

            D[i]=0;

            for(int j=1;j<=n;j++) a[i][j]=0;

        }

      }

}



int main()

{

	Citire();

    return 0;

}