Cod sursa(job #1731395)

Utilizator liviu23Liviu Andrei liviu23 Data 18 iulie 2016 20:27:11
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <fstream>
#include <vector>
#include <queue>
#define DIM 50005
using namespace std;

int n,m,d[DIM];
vector<pair<int,int> > adj[DIM];

bool checkDist(int s) {
    for(int i=1;i<=n;i++) {
        int mn=50000000;
        if(i==s&&!d[i])
            continue;
        for(int j=0;j<adj[i].size();j++)
            mn=min(mn,d[adj[i][j].first]+adj[i][j].second);
        if(mn!=d[i])
            return false;
    }
    return true;
}

int main()
{
    ifstream fin("distante.in");
    ofstream fout("distante.out");
    int t,s,a,b,c;
    fin>>t;
    for(int i=1;i<=t;i++) {
        for(int j=1;j<=n;j++)
            adj[j].clear();
        fin>>n>>m>>s;
        for(int j=1;j<=n;j++)
            fin>>d[j];
        for(int j=1;j<=m;j++) {
            fin>>a>>b>>c;
            adj[a].push_back({b,c});
            adj[b].push_back({a,c});
        }
        if(checkDist(s))
            fout<<"DA\n";
        else
            fout<<"NU\n";
    }
    return 0;
}