1 条题解

  • 1
    @ 2026-3-26 22:40:25
    #include <bits/stdc++.h>
    using namespace std;
    const int N = 1e5 + 10;
    const int mod = 1e9 + 7;
    const int INF = 0x3f3f3f3f;
    const long long LLINF = 0x3f3f3f3f3f3f3f3fLL;
    struct Node{
    	int l, r;
    }e[N];
    int dep[N];
    bool wq[N], wm[N];//完全二叉树,完美二叉树
    void dfs(int u){
    	if(u == 0) return;
    	int l = e[u].l, r = e[u].r;
    	if(l) dfs(l);
    	if(r) dfs(r);
    	dep[u] = max(dep[l], dep[r]) + 1;
    	if(wm[l] && wm[r] && dep[l] == dep[r]){
    		wm[u] = 1;
    		wq[u] = 1;
    	}
    	else if(wq[l] && wm[r] && dep[l] == dep[r] + 1){
    		wq[u] = 1;
    	}
    	else if(wm[l] && wq[r] && dep[l] == dep[r]){
    		wq[u] = 1;
    	}
    }
    int main(){
    	int n;
    	cin >> n;
    	for(int i = 1 ; i <= n ; i++){
    		cin >> e[i].l >> e[i].r;
    	}
    	memset(wm, 0, sizeof(wm));
    	memset(wq, 0, sizeof(wq));
    	wq[0] = 1, wm[0] = 1;
    	dep[0] = 0;
    	dfs(1);
    	int cnt = 0;
    	for(int i = 1 ; i <= n ; i++){
    		if(wq[i]) cnt++;
    	}
    	cout << cnt << endl;
    	return 0;
    }
    • 1

    信息

    ID
    3503
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    56
    已通过
    11
    上传者