noip2010关押罪犯排序做法

本文待打磨。才怪。

题目主题是两个集合中最大冲突值——即边,最小。

两个集合中的点强制连边,于是无法选择以边为主的做法,选择以点为主的做法。

任意两点之间,如果有的话,有一个唯一的边权,如果将这两个点分到不同集合中,这唯一的一个边就会被断开。

如果两个集合中的最大边已经确定,那么拥有更大边权的边之前一定被断开了,即被断开的边两端的点被分到两个集合中了。

而这条边为什么不能继续断开?

只有一种可能,即断开这条边,会导致边权更大的边复联(混进来什么东西?)。

如何判断?

既然比那个不能断开的边边权更大的边的操作全都顺利进行了,那么……就这样做吧!

想一下,

如果将这条边断开会导致更大的边权产生,那么这条边两端的两个点一定与边权更大的边有关联,

那么这2个“Teriri之点”(*注释1)一定在之前的断边操作中被分配过集合,而且“Teriri之点”的更大边权产生点一定在另一个集合中。

这就提供了一个思路:按照边权大小分配集合,若要分配的点已经被分配到同一个集合中,那么这条待断的边就是答案边。

如何操作?

如果要断开某条边,一定要将此边两端某点送入一个集合,另一个送入另一个集合,

正常并查集无法在此基础上进行集合合并,选择种类并查集,遵从“我的对面的那个集合的对面的那个集合就是我啦”,

在断边操作的过程中维护元素的关系。


注释1:开个玩笑……意思是如星星般闪耀的点,即瞩目点。

猜你喜欢

转载自www.cnblogs.com/tztqwq/p/10811368.html