摘要: 分析:一个贪心的想法是每次找到根的点权和最大的点进行操作,关键是怎么维护.每次找最大值,修改后会对这条链上每个点的子树上的点造成影响,可以用线段树来维护.找最大值就是区间求最大值嘛,对子树进行操作利用dfs序维护一下就好了.记录一下最大值的位置,每次从这个位置向上跳并对它的子树进行修改直到当前点的点 阅读全文
posted @ 2017-11-01 18:31 zbtrs 阅读(244) 评论(0) 推荐(0) 编辑
摘要: 分析:举个例子就能发现:偶数位上的数都必须是0,奇数位上的数可以取0~k-1,这就是一个标准的数位dp了. 这编译器......数组越界了竟然不报错. 阅读全文
posted @ 2017-11-01 16:37 zbtrs 阅读(166) 评论(0) 推荐(0) 编辑
摘要: 分析:每个连通块都是独立的,对一个连通块进行分析.如果边数>点数,显然是不可能的,因为每条边要分配给一个点,至少有一个点分配了两次以上.如果边数=点数,就形成了环,有两种方案,顺时针一个环,逆时针一个环.如果边数=点数-1,形成了链,将n个点分配n-1条边,答案为C(n,n-1),也就是n,统计一下 阅读全文
posted @ 2017-11-01 15:02 zbtrs 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 分析:这道题和以前做过的模拟赛题很像:传送门. 对于前30%的数据可以直接暴力求,k=1的数据利用线段树求区间最大值,没有修改操作可以用主席树.100%的数据主席树是肯定用不了的,观察到K非常小,可以用线段树来暴力维护. 线段树记录每个区间内的第k小值(1≤k≤10),其它的操作没啥变化,就是pus 阅读全文
posted @ 2017-11-01 13:19 zbtrs 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 分析:博弈论. 单个博弈通用的解法是dp,设f[i][j][0]为如果在(i,j)Yuri先走能否获胜,f[i][j][1]为Chito能否获胜,对应的就是必胜态和必败态的转移.如果f[i-1][j][1],f[i-1][j-1][1],f[i][j-1][1]都为1,那么f[i][j][0]为0, 阅读全文
posted @ 2017-11-01 11:03 zbtrs 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 分析:好神的一道题啊.对每棵树建个图跑一下floyd可以有40分,想要打出正解就得对树有比较深的认识了. 每次新生成一棵树都是由两棵树i,j拼成的,答案为原来两棵树的答案和+i中每个点到j中每个点的距离和.显然这个距离和不能直接算,涉及到求整体的值,通常考虑每条边的贡献.设i,j两棵树的连接点为p, 阅读全文
posted @ 2017-11-01 09:58 zbtrs 阅读(176) 评论(0) 推荐(0) 编辑