今晚的D
  • 板块学术版
  • 楼主Isshiki·Iroha
  • 当前回复11
  • 已保存回复11
  • 发布时间2022/10/16 01:13
  • 上次更新2023/10/27 07:20:24
查看原帖
今晚的D
414386
Isshiki·Iroha楼主2022/10/16 01:13

请问贪心可不可以啊?

就是平分,多的给前几大的

不行可以 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);
        }
    }
}```
2022/10/16 01:13
加载中...