请问贪心可不可以啊?
就是平分,多的给前几大的
不行可以 hack 一下吗?
vector<int>son[maxn];
int cmp(int a,int b){
return Max[a]>Max[b];
}
void dfs1(int u){
for(auto v:son[u]){
val[v]+=val[u];
Max[v]=val[v];
dfs1(v);
Max[u]=max(Max[u],Max[v]);
}
Max[u]=max(Max[u],val[u]);
}
void dfs2(int u,int tot){
sort(son[u].begin(),son[u].end(),cmp);
int sz=(int)son[u].size();
if(!sz){
ans+=val[u]*tot*1ll;
return;
}
int all=tot/sz;
int rest=tot%sz;
for(int v:son[u]){
if(rest){
dfs2(v,all+1);
--rest;
}
else {
dfs2(v,all);
}
}
}```