Cod sursa(job #330989)

Utilizator freak93Adrian Budau freak93 Data 12 iulie 2009 11:42:06
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<fstream>
#include<vector>
#include<cstring>

using namespace std;

ifstream f("distante.in");
ofstream g("distante.out");

const int maxn=50003;

int t,n,dis[maxn],m,s,x,y,z,p,i,j,ok,ok2;

struct nod
{
    int w;
    int dis;
}
    one;

vector<nod>a[maxn];

int main()
{
    f>>t;
    for(p=1;p<=t;++p)
    {
        f>>n>>m>>s;
        for(i=1;i<=n;++i)
            f>>dis[i];
        for(i=1;i<=m;++i)
        {
            f>>x>>y>>z;
            one.w=y;
            one.dis=z;
            a[x].push_back(one);
            one.w=x;
            a[y].push_back(one);
        }
        ok=1;

        for(i=1;i<=n&&ok;++i)
            if(i==s)
            {
                if(dis[i])
                ok=0;
            }
            else
            {
                ok2=0;
                for(vector<nod>::iterator it=a[i].begin();it!=a[i].end()&&ok;++it)
                    if(dis[it->w]+it->dis<dis[i])
                        ok=0;
                    else
                        if(dis[it->w]+it->dis==dis[i])
                            ok2=1;

                if(!ok2)
                    ok=0;
            }
        if(ok)
            g<<"DA\n";
        else
            g<<"NU\n";
    }
    f.close();
    g.close();

    return 0;
}