比赛 “Asm.Def战记之太平洋”杯 评测结果
题目名称 Asm.Def的基本算法 最终得分 0
用户昵称 HYOI_ingn 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2018-11-07 19:13:44
显示代码纯文本
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+10;
const int mod=1e9+7;
vector<int>g[maxn];
int n,w[maxn],fa[maxn];
int ans,sum[maxn];
void dfs(int u){
	int len=g[u].size();
	if(len==0){
		sum[u]=w[u];
		return;
	}
	for(int i=0;i<len;i++){
		int v=g[u][i];
		dfs(v);
		if(sum[u]!=0){
			ans=(ans+(sum[u]%mod*(sum[v]%mod))%mod*(w[u]%mod)%mod)%mod;
		}
		sum[u]=(sum[u]+sum[v])%mod;
	}
	ans=(ans+((sum[u]%mod)*(w[u]%mod))%mod*(w[u]%mod)%mod)%mod;
	sum[u]+=w[u];
}
signed main(){
	freopen("asm_algo.in","r",stdin);
	freopen("asm_algo.out","w",stdout);
	cin>>n>>w[1];
	for(int i=2;i<=n;i++){
		cin>>fa[i]>>w[i];
		g[fa[i]].push_back(i);
	}
	dfs(1);
	ans=ans*2%mod;
	for(int i=1;i<=n;i++){
		ans=(ans+((w[i]%mod)*(w[i]%mod)%mod)*(w[i]%mod)%mod)%mod;
	}
	/*for(int i=1;i<=n;i++){
		cout<<"i:"<<i<<" "<<sum[i]<<"\n";
	}*/
	cout<<ans;
}