Cod sursa(job #1374024)

Utilizator EberardoVladianu Cosmin Eberardo Data 4 martie 2015 22:13:51
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>

using namespace std;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,s;
int d[50001];
bool viz[50001];
void inutil(int i)
{
    int a,b,c;
    i++;
    while(i<=m)
    {

        fin>>a>>b>>c;
        i++;

    }
}
void citire()
{
    fin>>t;
    int a,b,c,i;
    while(t)
    {
        fin>>n>>m>>s;
        for(i=1;i<=n;i++)
        viz[i]=0;
        for(i=1;i<=n;i++)
            fin>>d[i];
        if(d[s])
        {
            inutil(0);
            fout<<"NU"<<'\n';
        }
        else
        {

        viz[s]=1;
        for(i=1;i<=m;i++)
            {
                fin>>a>>b>>c;
                if(d[a]>d[b]+c)
                    {
                    inutil(i);
                    i=m+1;
                    }
                else if(d[a]==d[b]+c)
                {
                    viz[a]=1;
                }
                if(d[b]>d[a]+c)
                {
                    inutil(i);
                    i=m+1;
                }
                else if(d[b]==d[a]+c)
                {
                    viz[b]=1;
                }

            }
            if(i==m+2)
                fout<<"NU"<<'\n';
            else
            {
                for(i=1;i<=n;i++)
                    if(!viz[i])
                {
                    fout<<"NU"<<'\n';
                    i=n+1;
                }
                if(i==n+1)
                    fout<<"DA"<<'\n';
            }
        }

    t--;
    }
}
int main()
{
    citire();

    return 0;
}