Cod sursa(job #359485)

Utilizator mihaionlyMihai Jiplea mihaionly Data 27 octombrie 2009 07:52:40
Problema Distante Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <fstream>
#include <vector>
using namespace std;
#define Mmax 100001
#define inf 1<<30
int n,m,s,t,x[Mmax],y[Mmax];
long c[Mmax],dx[Mmax/2+1],d[Mmax/2];
ifstream f("distante.in");
ofstream g("distante.out");
void read()
 {
 int i;
 f>>n>>m>>s;
 for(i=1;i<=n;i++) {  f>>dx[i];  d[i]=inf;  }
 for(i=1;i<=m;i++)
  {
  f>>x[i]>>y[i]>>c[i];
  if(x[i]==s)
   d[y[i]]=c[i];
  }
 d[s]=0;
 } 
void solve()
 {
 bool ok=true;
 int i;
 while(ok)
  {
  ok=false;
  for(i=1;i<=m;i++)
   {
   if(d[y[i]]>d[x[i]]+c[i])
    {	
	d[y[i]]=d[x[i]]+c[i];
	ok=true;
    }
   }
  }
 }
void show()
 {
 
 int i;
 for(i=1;i<=n;i++)
  if(!(d[i]==dx[i]||(dx[i]==0&&d[i]==inf)))
   {
   g<<"NU\n";
   return;
   }
 g<<"DA\n";
 }
int main()
 {
 f>>t;
 while(t)
 {
 read();
 solve();
 show();
 --t;
 }
 return 0;	 
 }