Cod sursa(job #886165)

Utilizator radu_bucurRadu Bucur radu_bucur Data 22 februarie 2013 17:59:03
Problema Distante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <fstream>
#include <vector>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");
vector <int> a[50001],b[50001];
int n,i, x,y,z,e,l,k,m,c[50001],t,q[2000000],d[50001];
bool ok;
int main()
{
    in>>t;
    for(e=1;e<=t;e++)
    {
        in>>n>>m>>q[1];
        for(i=1;i<=n;i++)
        {
            a[i].clear();
            b[i].clear();
        }
        l=1; k=1; ok=true;
        for(i=1;i<=n;i++)
        {
            in>>c[i];
        }
        for(i=1;i<=m;i++)
        {
            in>>x>>y>>z;
            a[x].push_back(y);
            a[y].push_back(x);
            b[x].push_back(z);
            b[y].push_back(z);
        }
        for(i=1;i<=n;i++) d[i]=10000000;
        d[q[1]]=0;
        while(l<=k)
        {
            x=q[l++];
            for(i=0;i<a[x].size();i++)
            {
                    y=a[x][i];
                    if(d[x]+b[x][i]<d[y])
                    {
                        k++;
                        d[y]=d[x]+b[x][i];
                        q[k]=y;
                    }

            }
        }
        for(i=1;i<=n;i++)
            if(c[i]!=d[i]) ok=false;
        if(ok==true) out<<"DA\n";
        else out<<"NU\n";
    }
    return 0;
}