Pagini recente » Cod sursa (job #1848123) | Cod sursa (job #1866124) | Cod sursa (job #1991067) | Cod sursa (job #2758376) | Cod sursa (job #2161242)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
#define maxx 50002
#define cost first
#define nod second
#define inf 0x3f3f3f3f
using namespace std;
ifstream f("distante.in");
ofstream g("distante.out");
int n,m,j,c,i,viz[maxx],rez[maxx],T,s,corect,x;
vector < pair <int,int> > G[maxx];
vector < pair <int,int> > :: iterator it;
priority_queue < pair < int, int >, vector < pair < int, int > >, greater < pair < int, int > > > pq;
pair <int, int> aux;
int main()
{
f>>T;
for(int k=0;k<T;k++)
{
f>>n>>m>>s;
for(i=1;i<=n;i++)
{
f>>rez[i];
}
for(int r=1;r<=m;r++)
{
f>>i>>j>>c;
G[i].push_back(make_pair(c,j));
G[j].push_back(make_pair(c,i));
}
pq.push({0,s});
while(!pq.empty())
{
aux=pq.top();
pq.pop();
if(!viz[aux.nod])
{
viz[aux.nod]=aux.cost;
for(it=G[aux.nod].begin();it!=G[aux.nod].end();it++)
{
if(!viz[(*it).nod])
pq.push({aux.cost+(*it).cost,(*it).nod});
}
}
}
corect=1;
for(i=1;i<=n;i++)
{
if(i==s)
{
viz[i]=0;
}
if(viz[i]!=rez[i])
corect=0;
}
if(corect==1)
g<<"DA"<<'\n';
else
g<<"NU"<<'\n';
}
g<<1;
f.close();
g.close();
return 0;
}