Cod sursa(job #2321717)

Utilizator alexkosaAlex Kosa alexkosa Data 16 ianuarie 2019 16:01:25
Problema Distante Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>

using namespace std;

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

int t,n,m,sol[50003],s,a[5000][5000];



int main()
{
    fin>>t;
    for(int c=1;c<=t;c++)
    {
        fin>>n>>m>>s;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                a[i][j]=0;

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

            }
        for(int i=1;i<=m;i++)
        {
            int x,y,z;
            fin>>x>>y>>z;
            a[x][y]=z;
            a[y][x]=z;
        }
        for(int k=1;k<=n;++k)
        for(int i=1;i<=n;++i)
            for(int j=1;j<=n;++j)
                if((a[i][j]>a[i][k]+a[k][j] || !a[i][j]) &&  i!=j && a[i][k] && a[k][j])
                    a[i][j]=a[i][k]+a[k][j];


        a[s][s]=0;
        int ok=1;
        for(int i=1;i<=n;i++)
           {
               if(a[s][i]!=sol[i])
            {
                ok=0;
                break;
            }
           }
        if(ok==0)
            fout<<"NU"<<'\n';
        else
            fout<<"DA"<<'\n';



    }
}