Pagini recente » Cod sursa (job #1061871) | Cod sursa (job #110837) | Cod sursa (job #1245394) | Autentificare | Cod sursa (job #593732)
Cod sursa(job #593732)
#include <algorithm>
#include <fstream>
#include <cstring>
#include <vector>
#define MAX 50001
using namespace std;
vector <pair<int,int> > v[MAX];
int D[MAX],ok[MAX];
int main()
{
int T,M,N,S,x,y,c,end;
vector <pair<int,int> >::iterator it;
ifstream in;
ofstream out;
in.open("distante.in");
out.open("distante.out");
in>>T;
for(;T;T--)
{
memset(D,0,sizeof(D));
in>>N>>M>>S;
for(int i=1;i<=N;i++) in>>D[i];
for(;M;--M)
{
in>>x>>y>>c;
v[x].push_back(make_pair(y,c));
v[y].push_back(make_pair(x,c));
}
if(D[S]!=0) out<<"NU\n";
else
{
memset(ok,0,sizeof(ok));
ok[S]=1;
end=0;
for(int i=1;i<=N;i++)
{
for(it=v[i].begin();it!=v[i].end();it++)
if(D[i]+(*it).second<D[(*it).first])
{
end=1;
break;
}
else
if(D[i]+(*it).second==D[(*it).first]) ok[(*it).first]=1;
if(end) break;
}
if(!end)
for(int i=1;i<=N;i++)
if(!ok[i])
{
end=1;
break;
}
if(!end) out<<"DA\n";
else out<<"NU\n";
}
for(;N;N--)
v[N].clear();
}
in.close();
out.close();
return 0;
}