Cod sursa(job #1897795)

Utilizator nick12nicolae mihalache nick12 Data 1 martie 2017 18:28:06
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <bits/stdc++.h>
using namespace std;
#define pp pair<int,int>
int n;

//vector <pp> arr[50003];
int pr[50001];
int d[50001];
#define oo 1000000

pp P;


int dis(int s,vector <pp> arr[50003])
{
    priority_queue <pp> Q;
    d[s] = 0;
    //prev[s] = 1;

    Q.push(make_pair(0,s));
    while (Q.size())
    {
        pp u = Q.top();
        Q.pop();
        if (pr[u.second] == 0)
        {
        pr[u.second] = 1;
        vector <pp> :: iterator it = arr[u.second].begin(),
        sf = arr[u.second].end();
        for (;it != sf;++it)
        {

            int alt = -u.first + (*it).second;
            if (alt < d[(*it).first])
            {
                d[(*it).first] = alt;
                Q.push(make_pair(-d[(*it).first],(*it).first));
            }
        }
        }
    }
    return 1;
}

int main() {

    int t;
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    cin >> t;
    while (t>0)
    {
    memset(d,oo,sizeof(d));
    memset(pr,0,sizeof(pr));
    vector <pp> arr[50003];
    int m,s;
    vector <int> ar;
    cin >> n >> m >> s;
    cout << n << m << s << endl;
    for (int i=0,z;i<n;i++)
    {
        cin >> z;
        ar.push_back(z);
    }
    for (int i=0;i<m;i++)
    {
        int a,b,c;
        cin >> a >> b >> c;
   //     printf("%d %d %d\n",a,b,c);
        arr[a-1].push_back(make_pair(b-1,c));
        arr[b-1].push_back(make_pair(a-1,c));
    }
    dis(s-1,arr);
    bool bul = true;
    for (int i=0;i<ar.size();i++)
    {
    //  cout << d[i] << " ";
        if (ar[i] != d[i])
            bul = false;
    }
    if (bul)
    cout << "DA\n";
    else cout << "NU\n";
    t--;
    }
    return 0;
}