HAOI2015

河南的题那么强QAQ
D1T1:
简单的树形Dp。
对于当前的一个节点Now,我们先枚举它的儿子节点,再通过size[Now]*size[Son]的复杂度更新F[Now];
for(int i=1;i<=K;i++) G[Now][i]=F[Now][i];
for(int i=min(size[Now],K);i>=0;i--)
    for(int j=0;j<=min(min(i,K),size[bian[u].to]);j++) 
    {
    long long Ans=0;
    Ans=F[Now][i-j]+F[bian[u].to][j];
    Ans+=(long long)(j*(K-j))*(long long)(bian[u].len);
    Ans+=(long long)((size[bian[u].to]-j)*(N-size[bian[u].to]-K+j))*(long long)(bian[u].len);
    G[Now][i]=max(G[Now][i],Ans);
    }
for(int i=1;i<=K;i++) F[Now][i]=G[Now][i]; 
必须把G提出来计算,不然可能有问题。


D1T2:
树链剖分,裸爆了好不好。
last[x]表示以x为根的子树中编号最大的点的编号。 
线段树就可以了。


D2T1:
我们设A[x]表示到了x这个状态及其子集可能被选中的概率。
那么最后答案就是 Sigma(Miu[x]/(1-A[x]))。
证明见bzoj4036
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值