Cod sursa(job #1987900)

Utilizator victoreVictor Popa victore Data 1 iunie 2017 14:14:14
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include<cstdio>
#include<vector>
#include<queue>

using namespace std;

const int nmax=50005;

typedef pair<int,int> ii;
vector<ii>g[nmax];
int deverif[nmax],ans[nmax];
queue<int> q;

int main()
{
    freopen("distante.in","r",stdin);
    freopen("distante.out","w",stdout);
    int m,x,c,y,n,i,j,t,s;
    scanf("%d",&t);
    while(t)
    {
        scanf("%d%d%d",&n,&m,&s);
        for(i=1;i<=n;i++)
            scanf("%d",&deverif[i]);
        for(i=1;i<=n;i++)
        {
            scanf("%d%d%d",&x,&y,&c);
            g[x].push_back(ii(y,c));
            g[y].push_back(ii(x,c));
        }
        q.push(s);
        for(i=1;i<=n;i++)
            ans[i]=-1;
        ans[s]=0;
        int node,current,sz;
        while(!q.empty())
        {
            node=q.front();
            sz=g[node].size();
            q.pop();
            for(i=0;i<sz;++i)
            {
                current=g[node][i].first;
                if(ans[current]==-1)
                {
                    ans[current]=ans[node]+g[node][i].second;
                    q.push(current);
                }
            }
        }
        bool a=1;
        for(i=1;i<=n;i++)
            if(deverif[i]!=ans[i])
            {
                a=0;
                break;
            }
        if(a)
            printf("DA\n");
        else
            printf("NU\n");
        t--;
    }
}