Cod sursa(job #1827067)

Utilizator vladisimovlad coneschi vladisimo Data 11 decembrie 2016 13:46:06
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int n,m,r,i,j,c[10000][10000],d[10000],s[10000],a[10000],t,sw;
void cit(){
    int i,j,k,cost;
    fin>>n>>m>>r;
    for(i=1;i<=n;i++)
        fin>>a[i];
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
        if(i!=j)
        c[i][j]=10000000;
    for(k=1;k<=m;k++){
        fin>>i>>j>>cost;
        c[i][j]=c[j][i]=cost;
    }
}
void dijkstra(int r){
    int i,k,j,Min;
        s[r]=1;
    for(i=1;i<=n;i++)
        if(i!=r)
        d[i]=c[i][r];
    d[r]=0;
    for(k=1;k<=n-1;k++){
        Min=100000000;
        for(j=1;j<=n;j++)
            if(Min>d[j]&&s[j]==0){
                i=j;
                Min=d[j];
            }
        s[i]=1;
        for(j=1;j<=n;j++)
            if(d[j]>d[i]+c[i][j]){
                d[j]=d[i]+c[i][j];
            }
    }
}
int main()
{
    fin>>t;
    for(i=1;i<=t;i++){
        cit();
        dijkstra(r);
        sw=0;
        for(j=1;j<=n;j++)
            if(a[j]!=d[j])
            sw=1;
        if(sw==0)
            fout<<"DA"<<'\n';
        else
            fout<<"NU"<<'\n';
    }
    return 0;
}