首页 > 其他分享 >Codeforces Global Round 23 D

Codeforces Global Round 23 D

时间:2022-11-23 03:57:16浏览次数:47  
标签:23 int res Global Codeforces dfs son dp

D. Paths on the Tree

思考问题我们发现我们路径总是可以走到底的 而不会中途中断
而且对于每一个分叉点 也就是每个儿子至少都会有当前还剩的k/儿子数
取余剩下的我们可以分给其他点
这样我们就可以想出一个比较暴力的状态
dp[u][k]表示u节点有k条路径经过的max
我们转移的时候显然是可以考虑一个背包选一些儿子多加一条边
但是我们这里也可以直接贪心的让每个边都不加然后对比他加了一条谁增长的更多就选谁
这样肯定是合法的 而且增加的每个边都不会互相产生冲突 正确性显然
然后这里状态的数量看起来是nk的
但其实不然 k 最大是1e9
但是每次k都会被/一次
也就是最坏至多log个状态

int n,k,s[N],f[N];
vector<int>son[N];
map<int,int>dp[N];
int dfs(int u,int k){
    if(dp[u].count(k))return dp[u][k];
    int res=k*s[u];
    if(son[u].empty())return dp[u][k]=res;
    vector<int>more;
    int p=k/son[u].size(),s=k%son[u].size();
    for(auto v:son[u]){
        res+=dfs(v,p);
        if(s)more.push_back(dfs(v,p+1)-dfs(v,p));
    }
    sort(all(more),greater<>());
    for(int i=0;i<s;i++)res+=more[i];
    return dp[u][k]=res;
}
void solve(){
    cin>>n>>k;
    for(int i=1;i<=n;i++)son[i].clear(),dp[i].clear();
    for(int i=2;i<=n;i++){
        cin>>f[i];
        son[f[i]].push_back(i);
    }
    for(int i=1;i<=n;i++){
        cin>>s[i];
    }
    cout<<dfs(1,k)<<endl;
}

标签:23,int,res,Global,Codeforces,dfs,son,dp
From: https://www.cnblogs.com/ycllz/p/16917063.html

相关文章

  • Codeforces Round #835 (Div4)
    A.MediumNumber题意:输入三个不同的数字,输出中位数思路:没啥说的,比较一下大小即可代码:<bits/stdc++.h>usingnamespacestd;intmain(){int_;cin>>......
  • CodeForces - 320E Kalila and Dimna in the Logging Industry
    题意:你有要拿一把锯子砍树。锯子有有电和没电两个状态,只有在有电的时候才能工作,每次工作都可以砍1单位高度的树,然后就会没电。没电后要充电才能工作。充电有代价,代价为,当前......
  • BZOJ1036-[ZJOI2008]树的统计Count&&POJ3237-Tree
    为什么把这两题放在一起呢,因为这两题其实是一道题,只是输入顺序不一样。这里主要以BZOJ1036为例。1036:[ZJOI2008]树的统计CountTimeLimit: 10Sec  MemoryLimit: ......
  • BZOJ3223-Tyvj 1729 文艺平衡树
    Description您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 4......
  • JavaScript对象_Global和案例1_点灯开关
    JavaScript对象_Global:Global:1.特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。方法名();2.方法:encodeURI():url编码decodeURI():url解码encodeUR......
  • Codeforces997A-Convert to Ones
    期末考炸完后重新开始做OI,先在Codeforces里面做一段时间锻炼一下思维,最近几篇都会写CF的文章,尽量把思维写得详细一点。题解:这题里面x,y的大小是很重要的。我们发现如果......
  • Codeforces Round #835 (Div. 4) A-G
    比赛链接A题意给出三个不同的数,求中位数。题解知识点:模拟。显然。时间复杂度\(O(1)\)空间复杂度\(O(1)\)代码#include<bits/stdc++.h>#definelllonglong......
  • Codeforces887C-Solution for Cube
    C.SolutionforCubetimelimitpertestmemorylimitpertestinputoutput......
  • Codeforces897B-Chtholly's request
    B.Chtholly'srequesttimelimitpertestmemorylimitpertestinputoutput—Thanksalotfortoday.—Iexperien......
  • Codeforces897A-Scarborough Fair
    A.ScarboroughFairtimelimitpertestmemorylimitpertestinputoutputAreyougoingtoScarboroughFair?Parsley,......