Cod sursa(job #1731364)

Utilizator liviu23Liviu Andrei liviu23 Data 18 iulie 2016 19:08:28
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <vector>
#include <queue>
#define DIM 50005
using namespace std;

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

bool checkDist(int s) {
    queue<int> q;
    q.push(s);
    d1[s]=0;
    while(!q.empty()) {
        int p=q.front(),pNext;
        if(d[p]!=d1[p])
            return false;
        for(int i=0;i<adj[p].size();i++) {
            pNext=adj[p][i].first;
            if(d1[pNext]==-1) {
                d1[pNext]=d1[p]+adj[p][i].second;
                q.push(pNext);
            }
        }
        q.pop();
    }
    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(),d1[j]=-1;
        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;
}