1 条题解
-
0
C++ :
#include <bits/stdc++.h> using namespace std; int n, a[100001], f[100001], x, y, Max; vector<int> e[100001]; /* * 方法二:记忆化搜索,搜索不包含父节点的数量 */ int dfs(int u, int p) { int s = 1; for (int v: e[u]) { if (v != p) { if (a[v] < a[u]) { s += dfs(v, u); } else { dfs(v, u); } } } return f[u] = s; } // 在搜索一次 void dfs2(int u, int p) { if (a[u] > a[p]) f[u] += f[p]; for (int v: e[u]) { if (v != p) { dfs2(v, u); } } Max = max(Max, f[u]); } int main() { cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; } for (int i = 1; i < n; i++) { cin >> x >> y; e[x].push_back(y); e[y].push_back(x); } dfs(1, 0); dfs2(1, 0); cout << Max; }
- 1
信息
- ID
- 5623
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者