Pagini recente » Cod sursa (job #1879503) | Cod sursa (job #1101736) | Cod sursa (job #431253) | Cod sursa (job #1269018) | Cod sursa (job #1370176)
#include<fstream>
#include<vector>
using namespace std;
typedef int var;
ifstream fin("distante.in");
ofstream fout("distante.out");
#define MAXN 100001
var nr_viz = 0;
bool VIZ[MAXN];
vector<var> G[MAXN];
var D[MAXN];
var dfs(var node) {
VIZ[node] = 1;
nr_viz ++;
for(auto vec : G[node]) {
if(!VIZ[vec]) {
dfs(vec);
}
}
}
int main() {
var t, n, m, a, b, c, start;
fin>>t;
while(t--) {
fin>>n>>m>>start;
for(var i=1; i<=n; i++) {
fin>>D[i];
G[i].clear();
VIZ[i] = 0;
}
nr_viz = 0;
bool gata = 0;
while(m--) {
fin>>a>>b>>c;
if(D[a] == D[b] + c) {
G[b].push_back(a);
} else if(D[b] == D[a] + c) {
G[a].push_back(b);
} else if(D[b] > D[a] + c || D[a] > D[b] + c) {
fout<<"NU\n";
gata = 1;
break;
}
}
if(gata) continue;
dfs(start);
if(nr_viz == n) {
fout<<"DA\n";
} else fout<<"NU\n";
}
return 0;
}