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