Cod sursa(job #1045245)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 1 decembrie 2013 08:23:20
Problema Distante Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream>
#include<vector>
using namespace std;

const int MAXN=50005;
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,n,m,s;
int d[MAXN];
bool flag,uz[MAXN];

int main()
{
    int i,a,b,c;
    fin>>t;
    for (int k=1; k<=t; ++k)
    {
		flag=true;
        fin>>n>>m>>s;
        for (i=1; i<=n; ++i)
            fin>>d[i];
        if (!d[s])
			uz[s]=true;
        for (i=1; i<=m && flag; ++i)
        {
            fin>>a>>b>>c;
            if (d[a]+c==d[b])
				uz[b]=true;
			if (d[b]+c==d[a])
				uz[a]=true;
			if (d[b]+c<d[a] || d[a]+c<d[b])
				flag=false;
        }
        for (i=1; i<=n; ++i)
        {
			if (!uz[i])
			{
				flag=false;
				break;
			}
			uz[i]=false;
        }
		if (flag)
			fout<<"DA\n";
		else
			fout<<"NU\n";
    }
    fin.close();
    fout.close();
    return 0;
}