1 条题解

  • 0
    @ 2025-11-3 0:09:35

    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
    上传者