比赛 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;   
}