比赛 2024暑假C班集训B 评测结果 EEEEEEEEEE
题目名称 Asm.Def的基本算法 最终得分 0
用户昵称 健康铀 运行时间 2.051 s
代码语言 C++ 内存使用 3.08 MiB
提交时间 2024-07-11 11:09:15
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int a[100010],b[100010],f[100010],n,w,ans,h[100010],tot,sum;
struct m{
    int ver,nx;
}e[400010];
void add(int x,int y){
    e[++tot].ver=y,e[tot].nx=h[x],h[x]=tot;
}
int main(){
    cin>>n>>a[1];
    b[1]=a[1];
    cout<<b[1]<<endl;
    for(int i=2;i<=n;i++){
        int x,y;
        cin>>x>>y;
        f[i]=x;
        a[i]=y%1000000007;
        b[i]=y%1000000007;
        add(x,i);
    }
    for(int i=n;i>=1;i--){
        ans=0;
        for(int j=h[i];j;j=e[j].nx){
            cout<<i<<" "<<e[j].ver<<endl;
            ans=(a[e[j].ver]+ans)%1000000007;
        }
        cout<<i<<" "<<b[1]<<" "<<ans<<endl;
        b[f[i]]=(ans+b[f[i]])%1000000007;
        b[i]=(b[i]+ans)%1000000007;
        
    }
    for(int i=n;i>=1;i--){
        for(int j=i;j;j=f[j]){
            cout<<i<<" "<<j<<" "<<b[j]<<" "<<a[i]<<" "<<a[j]<<endl;
            int x=b[j];
            if(j!=i){
               x-=a[i]; 
            }
            
            sum+=((x*a[i]%1000000007)*a[j])%1000000007;
        }
    }
    cout<<sum;
    return 0;
}