比赛 2024暑假C班集训B 评测结果 AAAAAAAAAA
题目名称 Asm.Def的基本算法 最终得分 100
用户昵称 小金 运行时间 0.123 s
代码语言 C++ 内存使用 6.24 MiB
提交时间 2024-07-11 11:33:22
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
const int mod=1e9+7;
const int maxm=1e5+10;
struct edge{
    int  x,y,next;
    edge(int x=0,int y=0,int next=0):
        x(x),y(y),next(next){}
}e[maxm<<1];
int n,tot,f,h[maxm],fa[maxm];
long long ans,w[maxm],s[maxm];
void add(int x,int y)
{
    tot++;
    e[tot]=edge(x,y,h[x]);
    h[x]=tot;
}
void dfs(int x)
{
    s[x]=w[x];
    for(int i=h[x];i;i=e[i].next)
    {
        if(!fa[e[i].y])
        {
            fa[e[i].y]=x;
            dfs(e[i].y);
            ans=(ans%mod+s[x]%mod*s[e[i].y]%mod*w[x]%mod)%mod;
            s[x]=(s[x]%mod+s[e[i].y]%mod)%mod;
        }
    }
}
int main()
{
    freopen("asm_algo.in","r",stdin);
    freopen("asm_algo.out","w",stdout);
    scanf("%lld%lld",&n,&w[1]);
    for(int i=2;i<=n;i++)
    {
        scanf("%d%d",&f,&w[i]);
        add(f,i);
    }
    dfs(1);
    ans=ans*2%mod;
    for(int i=1;i<=n;i++)
    {
        ans=(ans%mod+w[i]%mod*w[i]%mod*w[i]%mod)%mod;
    }
    printf("%lld",ans%mod);
    return 0;
}