2019雅礼集训Day8

**T1

艹想都想完枚举最小点在的连通块容斥了居然没意识到这是个dp…
肯定是太困了没意识到
那么对于一个 3 n 3^n 3n的做法就是枚举子集容斥
这里提供一种区别于题解的做法
我们用 f [ m a s k ] f[mask] f[mask]表示在 m a s k mask mask这个状态中的点均已联通的方案数,并且保证第一个点与之是联通的,即状态中不包括第一个点
容斥时我们只需要枚举一个集合,相当于枚举的是与 1 1 1相连的集合
然后可以发现,这就是一个子集卷积了,因为这里没有限制的
于是就可以愉快地 2 n n 2 2^nn^2 2nn2

****T2

不好意思不会…以后补以后补

T3

最可做的一题
首先可以知道,对于一个点被删去后,一定是在他最大的那棵子树中找一个子树扔到他最小的那个子树里
取的一定是最靠近 ( t o t [ x ] − t o t [ y ] ) / 2 (tot[x]-tot[y])/2 (tot[x]tot[y])/2的值,即前驱后继
那么如果最大的子树不是包括根的那棵,那么是主席树简单问题
否则我们发现,我们要去掉的是他到根以及他的子树
这里我sb了…写了一个智障做法.
先单独开一棵主席树维护每个点到根的信息
然后我们开一棵线段树,按DFS序从前往后以及从后往前分别扫一次
其中每个点只在他的子树全部访问完后才加入线段树
这样一个点在某次扫描的时候计算的只会是DFS序在他前/后且不包括到根的点的贡献
那么就可以愉快 n l o g n nlogn nlogn
虽然感觉这种做法应用还是可以很广的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值