!!!神秘题解!!!3
2025-10-12 17:20:08
发布于:浙江
4阅读
0回复
0点赞
”神秘题解“就在《!!神秘题解!!3》
。
。
。
。
。
。
。
。
#include <bits/stdc++.h>
using namespace std;
int a[100010], number;
vector<int> v[100010];
inline int dfs(int x, int fa, int cnt) {
int res = cnt + a[x];
if (res == number) {
return -1;
}
int m = 0;
for (auto u : v[x]) {
if (u ^ fa) {
int t = dfs(u, x, res);
if (t == -1) {
return -1;
}
m += (t == 1 ? 1 : 0);
if (m > 1 || t == 99999) {
return 99999;
}
}
}
return m + a[x] > 0;
}
signed main() {
iossync_with_stdio(false);
ios_basesync_with_stdio(false);
cin.tie(0), cout.tie(0);
int t;
cin >> t;
while (t--) {
number = 0;
bool flag = false;
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i])number++;
}
for (int i = 1; i < n; i++) {
int x, y;
cin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
}
for (int i = 1; i <= n; i++) {
if (a[i]) {
if (dfs(i, 0, 0) == -1) {
cout << "Yes\n";
flag = true;
break;
}
}
}
if (!flag)cout << "No\n";
for (int i = 1; i <= n; i++) {
while (!v[i].empty())v[i].pop_back();
}
}
return 0;
}
这里空空如也

有帮助,赞一个