【2018ICPC青岛】

Bui

题意:给n个问题,每一个问题有一个固定的答案ai(<=10^5).如今有m个约束关系,每一个约束关系是一个二元组(ui,vi),表示你回答ui、vi问题的答案必须同样。内存

如今让你输出分别修复一个约束,而后回答每一个问题,最多能答对多少道。vi

分析:约束关系实际上是弱联通关系,要求回答每一个联通块是同样的。因此建一个图。tar

而后考虑拆掉一个约束关系(一条边),能够发现若是处在一个强连通份量内,拆掉对答案没有影响。因此先tarjan缩编而后重建树。

如果一条桥边,那么就是把树拆成多个部分,更新答案。

具体我想能够经过dsu(长链剖分啊,重链剖分啊,把答案先存在重心上分治),或者经过树上的线段树合并(不知道内存会不会炸)。

线段树合并的作法:对那个联通块的根rt,fa(vi)=ui,更新答案能够 = tree(rt)-tree(ui) 和tree(ui)-tree(vi)-val(ui) 和tree(vi) - val (ui) 。

 

 

E

题意:有n棵植物从1到n,初始能力值都为0,还有个成长值ai。有个机器人,初始在0,若是机器人走到i,那么i植物能力值加上ai,如今给出机器人的活动步数m(<=10^12),求使得全部植物能力值最小值最大的值。

分析:二分答案,而后转化为每一个植物至少要走ki次,判断是否能知足。听说从左到右贪心就能够了。

相关文章
相关标签/搜索