社区讨论
20pts,WA,求调
P11249[GESP202409 七级] 小杨寻宝参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mlkain8n
- 此快照首次捕获于
- 2026/02/13 10:50 6 天前
- 此快照最后确认于
- 2026/02/15 21:40 4 天前
CODE:
CPP#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int MAXN = 1e5 + 5;
bool val[MAXN],ind[MAXN];
vector <int> son[MAXN];
vector <int> vec[MAXN];
void prepare(int w){
for (int i = 1;i <= w;i++){
vec[i].clear();
ind[i] = false;
son[i].clear();
}
}
bool build(int root,int father){
if (vec[root].size() == 1 && vec[root][0] == father)return true;
int cnt = 0;
for (int i = 0;i < vec[root].size();i++){
int now = vec[root][i];
if (val[now])cnt++;
if (cnt >= 3)return false;
}
bool flag = true;
for (int i = 0;i < vec[root].size();i++){
int now = vec[root][i];
son[root].push_back(now);
if (now != father){
bool result = build(now,root);
flag = (result == true ? true : false);
}
}
return flag;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int t;
cin >> t;
while (t--){
int n,root;
cin >> n;
prepare(n);
for (int i = 1;i <= n;i++)cin >> val[i];
for (int i = 1;i < n;i++){
int x,y;
cin >> x >> y;
vec[x].push_back(y);
vec[y].push_back(x);
ind[y] = true;
}
for (int i = 1;i <= n;i++){
if (!ind[i]){
root = i;
break;
}
}
if (build(root,-1))cout << "Yes\n";
else cout << "No\n";
}
return 0;
}
请大佬们指出错误在哪。
回复
共 0 条回复,欢迎继续交流。
正在加载回复...