Cod sursa(job #408132)

Utilizator otilia_sOtilia Stretcu otilia_s Data 2 martie 2010 20:56:15
Problema Distante Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include <vector>
using namespace std;
const int NMAX=50002;
struct Muchie {int x; short c;};
vector <Muchie> A[NMAX];
int d[NMAX];

int main()
{
	ifstream fin("distante.in"); ofstream fout("distante.out");
	int T;
	fin>>T;
	for (;T;--T)
	{ int n,m,s,i,j;
		fin>>n>>m>>s;
		for (i=1;i<=n;++i) fin>>d[i];
		if (d[s]) {fout<<"NU\n"; 
				   int x,y,z;
				   for (i=0;i<m;++i) fin>>x>>y>>z;
				   continue;
		          }
		bool ok=true;
		for (i=0;i<m;++i)
		{ Muchie z; int x,y;
			fin>>x>>y>>z.c;
			z.x=y; A[x].push_back(z);
			z.x=x; A[y].push_back(z);
			if (!(d[x]+z.c>=d[y] || d[y]+z.c>=d[x])) ok=0;
		}
		if (!ok)  {fout<<"NU\n"; 
					for (i=1;i<=n;++i)A[i].clear(); 
				   continue;
				  }
		int v;
		for (v=1;v<=n&& ok;++v)
			if (v!=s)
			{ int ne=A[v].size(); ok=false;
			 for (j=0;j<ne;++j)
				if (d[v]==d[A[v][j].x]+A[v][j].c) ok=true;			 
			}		
		if (!ok)  {fout<<"NU\n"; }
			else fout<<"DA\n";
		for (i=1;i<=n;++i)A[i].clear(); 
	}
	fin.close(); fout.close();
	return 0;
}