Pagini recente » Cod sursa (job #2274049) | Cod sursa (job #1732924) | Cod sursa (job #1843587) | Cod sursa (job #1666618) | Cod sursa (job #1142198)
#include<cstdio>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
vector<pair<int,int> > grf[50002];
vector<pair<int,int> >::iterator it;
queue<int> q;
bool fol[50002],nrk;
int dmin[50002],j,i,t,n,m,pol,lgnrk[50002],a,b,c,crt;
int main()
{
freopen("distante.in","r",stdin);
freopen("distante.out","w",stdout);
scanf("%d",&t);
for(i=1;i<=t;i++)
{
for(j=1;j<=n;j++)
{
grf[i].clear();
}
memset(dmin,0x3f3f3f3f,sizeof(dmin));
scanf("%d%d%d",&n,&m,&pol);
for(j=1;j<=n;j++)
{
scanf("%d",&lgnrk[j]);
}
for(j=1;j<=m;j++)
{
scanf("%d%d%d",&a,&b,&c);
grf[a].push_back(make_pair(b,c));
}
memset(fol,false,sizeof(fol));
q.push(pol);
fol[pol]=true;
dmin[pol]=0;
while(q.size())
{
crt=q.front();
fol[crt]=false;
q.pop();
for(it=grf[crt].begin();it!=grf[crt].end();it++)
{
if(dmin[crt]+it->second<dmin[it->first])
{
dmin[it->first]=dmin[crt]+it->second;
q.push(it->first);
fol[it->first]=true;
}
}
}
nrk=true;
for(j=1;j<=n;j++)
{
if(dmin[j]!=lgnrk[j])
{
nrk=false;
}
}
if(nrk)
{
printf("DA\n");
}
else
{
printf("NU\n");
}
}
}