比赛 |
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;
}