Cod sursa(job #1124451)

Utilizator IliescuDanAndreiIliescu Dan Andrei IliescuDanAndrei Data 26 februarie 2014 12:25:13
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream in("distante.in");
ofstream out("distante.out");

struct nod{int frate, cost; nod(int frate, int cost) {this->frate=frate; this->cost=cost;}};
queue <int> q;
vector <nod> a[50001];
int t, n, m, s, d[50001], v[50001];
bool ok=true;

void bfs(int x)
{
    q.push(x);
    d[x]=0;
    unsigned int i;
    int y;
    while(!q.empty())
    {
        x=q.front();
        q.pop();
        for(i=0;i<a[x].size();i++)
        {
            y=a[x][i].frate;
            if(d[x]+a[x][i].cost<d[y])
            {
                d[y]=d[x]+a[x][i].cost;
                q.push(y);
            }
        }
    }
}

int main()
{
    int i, j, x, y, z;
    in>>t;
    for(i=1;i<=t;i++)
    {
        in>>n>>m>>s;
        for(j=1;j<=n;j++)
        {
            in>>v[j];
            d[j]=50000000;
        }
        for(j=1;j<=m;j++)
        {
            in>>x>>y>>z;
            a[x].push_back(nod(y, z));
            a[y].push_back(nod(x, z));
        }
        bfs(s);
        j=1;
        while(ok && j<=n)
        {
            if(v[j]!=d[j]) ok=false;
            j++;
        }
        if(ok) out<<"DA"<<"\n";
        else out<<"NU"<<"\n";
    }
    return 0;
}