摘要: 设f[i][j][0/1]为前i位选j段时其中第i位选/不选最多能匹配到哪,转移时f[i][j][0]→f[i+1][j][0],f[i][j][1]→f[i+1][j][0],f[i][j][1]→f[i+1][j][1],f[i][j][0]→f[i+1][j+1][1]。失配时找到最后一位相同 阅读全文
posted @ 2018-12-03 22:52 Gloid 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 容易猜到能选择的黑点个数是一个连续区间。那么设f[i][j]为i子树内选j个点形成包含根的连通块,最多有几个黑点,g[i][j]为最少有几个黑点,暴力dp是O(n2)的,求出每个连通块大小对应的黑点数量取值范围即可。 惊觉差点不会树形背包了。注意不要出现任何非法转移,即使看上去无伤大雅。 阅读全文
posted @ 2018-12-03 21:48 Gloid 阅读(143) 评论(0) 推荐(0) 编辑
摘要: 设f[i]为选择i对i-1和i+1所带来的贡献。则有f[i-1]+f[i+1]+a[i]-2f[i]=b[i],特殊地,f[2]+a[1]=b[1],f[n-1]+a[n]-2f[n]=b[n]。可以发现这样我们有n-1个未知数和n个方程,代入求解判断是否矛盾即可。 但这只有必要性显然,为什么是充分 阅读全文
posted @ 2018-12-03 19:45 Gloid 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 大胆猜想每一步都相当于是第一步。稍微验证一下发现是对的。就做完了。 阅读全文
posted @ 2018-12-03 13:39 Gloid 阅读(149) 评论(0) 推荐(0) 编辑
摘要: 即要求动态维护边双。出现环时将路径上的点合并即可。LCT维护。具体地,加边成环时makeroot+access+splay一套把这段路径提出来,暴力dfs修改并查集祖先,并将这部分与根断开,视为删除这些点,以后就以并查集中的祖先代替这些点。access时更新每个点的父亲。注意由于之前的删点操作,判断 阅读全文
posted @ 2018-12-03 12:54 Gloid 阅读(233) 评论(0) 推荐(0) 编辑