
树形dp
alan_cty
蒟蒻一只
别打脸(⊙o⊙)哦
展开
-
GDSOI 2016 T2 星际穿越
Description有n个人在排队。他们会按顺序选择自己喜欢的点a[x]。如果a[x]已经被选择了,那么他会选择f[a[x]],如果f[a[x]]已经被选择了,则选择f[f[a[x]]]…保证所有人都有点选择。求选择的点本质不同的排列的方案数。 n<=10^6Solution我们把x向f[x]连边,那么原图就是一个环加内向树的模型。 如果只是一棵树的话,那么我们从叶子节点开始,设size[x]原创 2016-05-26 12:34:19 · 972 阅读 · 0 评论 -
[APIO2018]铁人两项
Description给出一张n个点,m条边的简单无向图,求有多个三元组(s,f,t),满足两两互不相等且存在至少一条从s出发经过f到t的不经过重复点的路径。 n<=1e5,m<=2e5Solution考场都去做A了没仔细想C,以为很麻烦 其实把圆方树弄出来就变得很简单了:考虑枚举中间点f,如果f是圆点就和树一样的做法,如果f是方点表示中间点可以是这个点双中除去起点...原创 2018-05-25 21:11:18 · 853 阅读 · 0 评论 -
[CF891D]Sloth
Description给出一棵n个节点的树,你需要删去并加入一条边,使得原图仍然是一棵树,并且有完美匹配。 求方案数。 n<=5*1e5Solution考虑枚举删去一条边,我们只需要统计某个子树内和外有多少个点可以成为匹配点。 可以设Dp,四种状态,根节点是否被匹配,除根外是否有节点未被匹配。 这样子可以O(n)统计出子树内的答案,但是子树外的答案似乎没有那么好求。 观察我们的转移,是从儿原创 2018-03-15 22:27:14 · 514 阅读 · 0 评论 -
【清华集训模拟】树
Description给出一棵n个点的树,每个点有点权a[i] 求把这棵树划分成若干条不相交的路径,使得每条路径上的点权和均非负的方案数。 n<=1e5Solution先考虑Dp怎么写,设Fx表示以x为根的子树已经覆盖完成了. 转移两条链,把这两条链上挂着的F值乘起来就是答案。 那么这个东西要如何用数据结构优化? 我们以权值为下标建立线段树,线段树里的每个点维护的是其到当前所做的根x路径上原创 2018-01-19 22:37:36 · 331 阅读 · 0 评论 -
[51nod1299]监狱逃离
Description给出一个n+1个点n条边的树,其中每一个度数为1的点为出口。 现在有一些点有逃犯,你需要在一些没有逃犯的点放置警卫,有警卫的点逃犯无法经过。 求若使所有逃犯均无法到达出口,最少需要多少个警卫。 n<=10^5Solution为什么我一眼想到最小割=w= 就是所有的逃犯无法到达一些点,那么我们把每个点拆点,x向x’连容量为1的边,割掉这条边表示在这个点放置警卫。 然后对原创 2016-12-20 22:01:13 · 1715 阅读 · 2 评论 -
【WC2015模拟2.6】Tree
Description给出一个n个节点的无根树,每个点有点权。 你要选择一些不相交的路径,如果选择了k条路径,点权和为sum,那么它的价值为sumk+1sum\over k+1 你必须在选择前选择一个数C(0<=c<=T),将所有点权加上C再对limit取模。 求你能收获的最大价值。 N<=10^5,T< limit<=10^6Solution昨天才讲完这种题的思路,今天就出了一道题2333原创 2016-12-26 12:40:32 · 617 阅读 · 0 评论 -
树上随机游走的期望距离
无聊写写(顺便背板) d[i]表示i的度数,每条边的长度均为1(虽然不是1也能做,但是好写啊) 我们设FiFi表示i走到它父亲的期望距离,则 Fi=1+(∑j是i的儿子Fj+Fi+1)d[i]Fi={{1+(\sum_{j是i的儿子}Fj+Fi+1)}\over d[i]} 就是分两种情况讨论,直接走到,或者走到它的儿子再走回去。 化简一下:Fi=∑j是i的儿子Fj+d[i]+(d[i]−原创 2016-11-12 15:19:05 · 3957 阅读 · 0 评论 -
【NOIP2016提高A组五校联考4】label
Description给出一个n个节点的树,每个节点可以填[1,m]中的任意一个数。 相邻节点的数的绝对值必须>=k 求方案数 n,k<=100,m<=10^9Solution首先我们考虑如何解决一条链上的 如果不考虑m的范围,我们有一个显然的dp 太显然不写了。。。 观察这个方程式,因为第1位都可以填,所以都是1. 然后第2位,旁边的1~k-1,和m-k+2~m,因为范围越界了,所以原创 2016-10-09 20:29:08 · 808 阅读 · 0 评论 -
西行妖
Description给出一棵树,你可以让最多s个叶子节点被染色。 然后,如果一个节点的儿子至少有一个被染色,那么他也会被染色。 如果一棵树有大于等于m个被染色的点,那么这棵树就是美丽的。 问给出一棵树,有多少种染色方案使得它是美丽的。 n,m<=1000,s<=20Solution很好的一道考验思维的题目。 我们可以按照dfs序中的顺序来对叶子节点进行dp。 我们设F[i,j,k]表示原创 2016-07-09 17:20:37 · 861 阅读 · 1 评论 -
[WC2019]数树
Description有两棵n个点的树,T1和T2,每个点可以填一个[1,y]的颜色若两棵树有一条边重合这条边两个端点的颜色必须相同有三种问题:op=0,给出T1和T2问答案op=1,给出T1问所有T2的答案和op=2,给出n问所有的T1和T2的答案和n<=100000Solutionop=0大家都会op=1的话,考虑算恰好有i条重边的y−iy^{-i}y−i的和考虑到...原创 2019-02-27 22:31:40 · 356 阅读 · 0 评论