Pagini recente » Cod sursa (job #529639) | Cod sursa (job #3192968) | Cod sursa (job #2151640) | Cod sursa (job #103477) | Cod sursa (job #1731364)
#include <fstream>
#include <vector>
#include <queue>
#define DIM 50005
using namespace std;
int n,m,d[DIM],d1[DIM];
vector<pair<int,int> > adj[DIM];
bool checkDist(int s) {
queue<int> q;
q.push(s);
d1[s]=0;
while(!q.empty()) {
int p=q.front(),pNext;
if(d[p]!=d1[p])
return false;
for(int i=0;i<adj[p].size();i++) {
pNext=adj[p][i].first;
if(d1[pNext]==-1) {
d1[pNext]=d1[p]+adj[p][i].second;
q.push(pNext);
}
}
q.pop();
}
return true;
}
int main()
{
ifstream fin("distante.in");
ofstream fout("distante.out");
int t,s,a,b,c;
fin>>t;
for(int i=1;i<=t;i++) {
for(int j=1;j<=n;j++)
adj[j].clear(),d1[j]=-1;
fin>>n>>m>>s;
for(int j=1;j<=n;j++)
fin>>d[j];
for(int j=1;j<=m;j++) {
fin>>a>>b>>c;
adj[a].push_back({b,c});
adj[b].push_back({a,c});
}
if(checkDist(s))
fout<<"DA\n";
else
fout<<"NU\n";
}
return 0;
}