1 条题解
-
1
#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
- 上传者