比赛 2024暑假C班集训B 评测结果 AAAAAAAAWW
题目名称 Asm.Def的基本算法 最终得分 80
用户昵称 darkMoon 运行时间 0.149 s
代码语言 C++ 内存使用 6.34 MiB
提交时间 2024-07-11 09:08:33
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("asm_algo.in");
ofstream fout("asm_algo.out");
auto mread = [](){
    int x;
    fin >> x;
    return x;
};
const int N = 1e5 + 5, MOD = 1e9 + 7;
int n = mread(), a[N], p[N], ans, s[N];
vector<int> v[N];
void dfs(int x){
    int sum = 0;
    for(int y : v[x]){
        dfs(y);
        s[x] += s[y];
    }
    if(s[x] > 0){
        for(int y : v[x]){
            (sum += s[y] * (s[x] - s[y]) % MOD) %= MOD;
        }
        (ans += sum * a[x] % MOD) %= MOD;
    }
    (ans += a[x] * a[x] % MOD * a[x] % MOD) %= MOD;
    (ans += a[x] * s[x] % MOD * a[x] % MOD * 2 % MOD) %= MOD;
    s[x] += a[x];
    return;
}
signed main(){
    a[1] = mread();
    for(int i = 2; i <= n; i ++){
        p[i] = mread(), a[i] = mread();
        v[p[i]].push_back(i);
    }
    dfs(1);
    fout << ans;
    return 0;
}