Pagini recente » Cod sursa (job #35662) | Cod sursa (job #528182) | Cod sursa (job #2712650) | Cod sursa (job #775480) | Cod sursa (job #1019734)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
FILE * f;
int t,i;
int exist(int nod, vector <int> vmn, vector <pair <int,int> > vnod)
{
int i;
int s=vnod.size();
for (i=0;i<s;i++)
if (vmn[vnod[i].first]+vnod[i].second==vmn[nod])
return 1;
return 0;
}
int verify(int nod, vector <int> vmn, vector <pair <int,int> > vnod)
{
int i;
int s=vnod.size();
for (i=0;i<s;i++)
if (vmn[nod]+vnod[i].second<vmn[vnod[i].first])
return 0;
return 1;
}
int go()
{
int n,m,s;
fscanf(f,"%d%d%d",&n,&m,&s);
int i,nr,a,b,c;
vector <int> v;
v.push_back(0);
for (i=1;i<=n;i++)
{
fscanf(f,"%d",&nr);
v.push_back(nr);
}
if (v[s]!=0)
return 0;
vector <pair <int, int> > nod[n+2];
for (i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&a,&b,&c);
nod[a].push_back(make_pair(b,c));
nod[b].push_back(make_pair(a,c));
}
for (i=1;i<=n;i++)
if (i!=s)
{
if (exist(i,v,nod[i])==0)
return 0;
if (verify(i,v,nod[i])==0)
return 0;
}
return 1;
}
int main(void)
{
f=fopen("distante.in","r");
ofstream g("distante.out");
fscanf(f,"%d",&t);
for (i=1;i<=t;i++)
{
if (go()==1)
g<<"DA\n";
else
g<<"NU\n";
}
g.close();
return 0;
}