「CF875F」Royal Questions
Description
Link:CF875F
有 个王子与 个公主。每个公主有喜欢的两个王子,编号分别为 ,但一个王子只能娶一个公主,一个公主也只能嫁给一个王子。每个公主有一个嫁妆价值 。
求国王能够得到的嫁妆最大值(允许有王子或公主无伴侣)。
数据范围:,。
时空限制:s / MiB。
Solution
将王子抽象成点,将公主抽象成边。对于一个公主,设其备选的两个王子为 ,需要的嫁妆为 。连一条无向边 。
一条边需要和这条边的一个端点配对,一个端点只能与与其相连的一条边配对。可以理解为每个节点至多选择一条出边,故选出的每个连通块要么是树、要么是基环树。故本题要求的是最大生成基环树森林。
考虑 Kruskal,对于一条边 ,当且仅当以下情况可以加入:
- 不连通,且 所在的连通块不能均为基环树。
- 连通,且所在的连通块不为基环树(但是加入这条边之后,所在的连通块就变成基环树了)。
使用并查集维护连通性,再额外记录一下每个连通块是否为基环树即可。