比赛 “Asm.Def战记之太平洋”杯 评测结果 AAAAAAAAAA
题目名称 Asm.Def的基本算法 最终得分 100
用户昵称 fyb 运行时间 0.206 s
代码语言 C++ 内存使用 2.68 MiB
提交时间 2015-11-02 11:12:01
显示代码纯文本
#include <cstdio>
#include <vector>

using namespace std;

#define NMAX 100000
#define P 1000000007

vector<int> g[NMAX+1];
long long w[NMAX+1],sum[NMAX+1];

long long dfs(int ind){
	long long ans=0,s,tmp=0;
	int tn;
	int i;

	s=w[ind];
	for(i=0;i<g[ind].size();i++){
		tn=g[ind][i];
		ans=(ans+dfs(tn))%P;
		tmp=(tmp+(s*sum[tn])%P)%P;
		s=(s+sum[tn])%P;
	}
	tmp=((tmp*2)%P+(w[ind]*w[ind])%P)%P;
	sum[ind]=s;
//	printf("%lld\n",sum[ind]);
	return ans=(ans+(tmp*w[ind])%P)%P;
}

int main(){
	int n;
	int tp;
	int i;

	freopen("asm_algo.in","r",stdin);
	freopen("asm_algo.out","w",stdout);

	scanf("%d%lld",&n,w+1);
	for(i=2;i<=n;i++){
		scanf("%d%lld",&tp,w+i);
		g[tp].push_back(i);
	}

	printf("%lld",dfs(1));
	return 0;
}