| 比赛 | 
    CSP2023-S模拟赛 | 
    评测结果 | 
    EEEEEEEEEEEEEEEEEEEE | 
    | 题目名称 | 
    删除题目 | 
    最终得分 | 
    0 | 
    | 用户昵称 | 
    在大街上倒立游泳 | 
    运行时间 | 
    3.941 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    9.65 MiB  | 
    | 提交时间 | 
    2023-10-17 21:58:20 | 
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
struct node{
    int f,s,lei;
    vector<int> ez;
}tree[100005]; 
int n,p,w;
void dfs1(int x){
    tree[x].s=1;
    for(int i=0;i<tree[x].ez.size();i++){
        dfs1(tree[x].ez[i]);
        tree[x].s+=tree[tree[x].ez[i]].s;
    }
}
int ans=0;
bool vis[100005];
int dfs2(int x,int fen,int s,int num){
    if(num==tree[x].s) vis[x]=1;
    ans=max(ans,s);
    if(!vis[x]) dfs2(x,fen,s+(num-1)*num/2-tree[x].s*(tree[x].s-1)/2-tree[x].lei,tree[x].s);
    for(int i=0;i<tree[x].ez.size();i++){
        dfs2(tree[x].ez[i],fen,s,num);
    }
    if(fen){
        for(int i=0;i<tree[x].ez.size();i++)
        {
            for(int j=i+1;j<tree[x].ez.size();j++){
                //
            }
        }
    }
    
}
int main(){
    //dfs烂摊子不搞了 
    freopen("delete.in","r",stdin);
    freopen("delete.out","w",stdout);
    scanf("%d",&n);
    for(int i=2;i<=n;i++){
        scanf("%d%d",&p,&w);
        tree[i].f=p;
        tree[i].lei=w;
    }
    dfs1(1);
    dfs2(1,1,0,tree[1].s);
    cout<<ans;
    return 0;   
}