社区讨论

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 条回复,欢迎继续交流。

正在加载回复...