Cod sursa(job #1299654)

Utilizator Darius15Darius Pop Darius15 Data 23 decembrie 2014 19:36:09
Problema Distante Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
typedef pair<int,int>  b;
vector <b> ve[50002];
queue <int> q;
int t,i,n,m,s,j,v[50002],d[50002],x,y,c,z;
bool ok;
int main()
{
    f>>t;
    for (i=1;i<=t;i++)
    {
        f>>n>>m>>s;
        for (j=1;j<=n;j++)
            d[j]=1<<31-1;
        for (j=1;j<=n;j++)
            f>>v[j];
            d[s]=0;
            q.push(s);
        for (j=1;j<=m;j++)
          {
              f>>x>>y>>c;
              ve[x].push_back(make_pair(y,c));
              ve[y].push_back(make_pair(x,c));
          }
          while(!q.empty())
          {
              x=q.front();
              q.pop();
              for (j=0;j<ve[x].size();j++)
              {
                if (d[ve[x][j].first]>d[x]+ve[x][j].second)
                d[ve[x][j].first]=d[x]+ve[x][j].second,q.push(ve[x][j].first);
              }
          }
          ok=true;
        for (j=1;j<=n;j++)
            if (d[j]!=v[j]) ok=false;
        if (ok==false) g<<"NU"<<'\n';
        else g<<"DA"<<'\n';
          for (j=1;j<=n;j++)
               while(ve[j].size()>0) ve[j].pop_back();
    }
    return 0;
}