1 条题解

  • 0
    @ 2025-7-20 18:31:52

    O(N)O(N)

    乘积的结果一定也是 10k10^k 或者 10k-10^k 或者 00 形式。

    要比较每个结点之间的大小,只需要比较指数的大小即可。 其中需要处理负数00 的情况

    所以对于每个结点来说,要比较大小需要保存3个东西

    1. 以该结点为根结点的子树中,所有指数的和。
    2. 以该结点为根结点的子树中,负数的个数。
    3. 以该结点为根结点的子树中,是否有 00 存在。

    如果子树中有0存在,那么结果为0。 否则计算指数的值:负数的数量为奇数时结果是负数,为偶数时结果是正数。指数之和表示值的大小。

    这些都可以在遍历树的过程中计算出。

    #include<bits/stdc++.h>
    
    using namespace std;
    
    typedef long long LL;
    typedef pair<int, int> PII;
    
    #define x first
    #define y second
    
    const int N = 1e5 + 10, mod = 1e9 + 7;
    
    int n;
    vector<int> v[N];
    int a[N];
    
    int cnt[N], sum[N]; // 负数的数量,指数的总和
    bool zero[N];
    
    int digit(int x)
    {
        int ans = 0;
        while(x)
        {
            x /= 10;
            ans ++;
        }
        return ans - 1;
    }
    
    void dfs(int u)
    {
        for(auto i: v[u])
        {
            dfs(i);
            if(zero[i]) zero[u] = 1;
            cnt[u] += cnt[i];
            sum[u] += sum[i];
        }
        
        int t = digit(a[u]);
        if(t == -1)
            zero[u] = 1;
        else
        {
            sum[u] += digit(a[u]);
            if(a[u] < 0)
                cnt[u] ++;
        }
    }
    
    void solve()
    {
        int n;
        cin >> n;
        for(int i = 2; i <= n; i ++)
        {
            int x;
            cin >> x;
            v[x].push_back(i);
        }
        for(int i = 1; i <= n; i ++) cin >> a[i];
        dfs(1);
        
        int x = -1e9, idx = 0;
        for(int i = 1; i <= n; i ++)
        {
            int v = zero[i] ? 0 : sum[i];
            if(cnt[i] & 1) v = -v;
            if(v > x) 
            {
                x = v;
                idx = i;
            }
        }
        cout << idx << endl;
    }
    
    int main()
    {
        int t = 1;
        // scanf("%d", &t);
        while(t --)
            solve();
    }
    
    • 1

    信息

    ID
    397
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    19
    已通过
    4
    上传者