Pagini recente » Cod sursa (job #1407805) | Cod sursa (job #2809132) | Cod sursa (job #3178888) | Cod sursa (job #2620696) | Cod sursa (job #1193636)
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
#define inf 0x3f3f3f3f
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define dim 50005
#define ff first
#define ss second
ifstream f("distante.in");
ofstream g("distante.out");
bool seen[dim];
vector<pii> v[dim];
queue<int> Q;
int db[dim],s,a,b,c,u,nr,n,m,t,i;
void bellmanford(){
if(db[s]!=0){
g <<"NU\n";
return;
}
nr=1;
memset(seen,0,sizeof(seen));
Q=queue<int>();
Q.push(s);
seen[s]=1;
while(!Q.empty()){
u = Q.front();
Q.pop();
for(i=0;i<int(v[u].size());i++){
if(db[u]+v[u][i].ss == db[v[u][i].ff]){
if(!seen[v[u][i].ff]) seen[v[u][i].ff]=1,nr++,Q.push(v[u][i].ff);
}
else if(db[u]+v[u][i].ss < db[v[u][i].ff]){
g << "NU\n";
return;
}
}
}
if(nr != n) g <<"NU\n" ;
else g << "DA\n";
}
int main(){
f >> t;
for(;t;t--){
f >> n >> m >> s;
for(i=1;i<=n;i++){
f >> db[i];
}
for(i=1;i<=m;i++){
f >> a >> b >> c;
v[a].pb(mp(b,c));
v[b].pb(mp(a,c));
}
bellmanford();
}
}