Cod sursa(job #3165411)

Utilizator cristianabalcanuCristiana Balcanu cristianabalcanu Data 6 noiembrie 2023 09:42:37
Problema Algoritmul lui Dijkstra Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.65 kb
#include <bits/stdc++.h>
#define NN 55
#define INF 5000000
using namespace std;
ifstream fin ("rfinv.in");
ofstream fout ("rfinv.out");

int t, n, m, a, b;
int v[NN][NN], w[NN][NN];

void reset()
{
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            v[i][j] = 0;
            w[i][j] = 0;
        }
    }
}

void afis()
{
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            fout << v[i][j] << " ";
        }
        fout << '\n';
    }
}

void test()
{
    fin >> n >> m;
    reset();
    for(int i = 1 ; i <= m ; i++)
    {
        fin >> a >> b;
        v[a][b] = -1;
        v[b][a] = -1;
    }
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            fin >> w[i][j];
            if(v[i][j] == -1)
            {
                v[i][j] = w[i][j];
            }
            else if(i != j)
            {
                v[i][j] = INF;
            }
        }
    }
    //afis();
    for(int k = 1 ; k <= n ; k++)
    {
        for(int i = 1 ; i <= n ; i++)
        {
            for(int j = 1 ; j <= n ; j++)
            {
                v[i][j] = min(v[i][j], v[i][k] + v[k][j]);
            }
        }
    }
    for(int i = 1 ; i <= n ; i++)
    {
        for(int j = 1 ; j <= n ; j++)
        {
            if(v[i][j] != w[i][j])
            {
                fout << "NU" << '\n';
                return;
            }
        }
    }
    fout << "DA" << '\n';
}

int main()
{
    fin >> t;
    for(int i = 1 ; i <= t ; i++)
        test();
    return 0;
}