Pagini recente » Istoria paginii runda/pregatire_cls12_oji/clasament | Cod sursa (job #2888056) | Cod sursa (job #1001849) | Cod sursa (job #2574238) | Cod sursa (job #443566)
Cod sursa(job #443566)
#include<fstream>
using namespace std;
int n,m,s,t,v[50005],verifi[50005];
struct nod{
int info;
int cost;
nod *next;};
nod *g[50005];
int verifica();
void adauga(int a,int b,int c);
ofstream fout("distante.out");
int main()
{
ifstream fin("distante.in");
fin>>t;
int i;
for(i=1;i<=t;i++)
{
fin>>n>>m>>s;
int j;
for(j=1;j<=n;j++)
fin>>v[j];
for(j=1;j<=m;j++)
{
int a,b,c;
fin>>a>>b>>c;
adauga(a,b,c);
adauga(b,a,c);
}
if(verifica()==1)
fout<<"DA";
else
fout<<"NU";
fout<<endl;
}
return 0;
}
int verifica()
{
int i,pp=1;
for(i=1;i<=n;i++)
verifi[i]=0;
for(i=1;i<=n;i++)
for(nod *p=g[i];p;p=p->next)
{
if(v[i]==v[p->info]+p->cost)
verifi[i]=1;
}
for(i=1;i<=n;i++)
if(verifi[i]==0 && i!=s)
pp=0;
if(pp==0)
return 0;
else
return 1;
}
void adauga(int a,int b,int c)
{
nod *p=new nod;
p->info=b;
p->cost=c;
p->next=g[a];
g[a]=p;
}