「CF875F」Royal Questions

Description

Link:CF875F

nn 个王子与 mm 个公主。每个公主有喜欢的两个王子,编号分别为 ai,bia_i, b_i,但一个王子只能娶一个公主,一个公主也只能嫁给一个王子。每个公主有一个嫁妆价值 wiw_i

求国王能够得到的嫁妆最大值(允许有王子或公主无伴侣)。

数据范围:2n2×1052 \leq n \leq 2 \times 10^51m2×1051 \leq m \leq 2 \times 10^5

时空限制:1.51.5s / 500500MiB。

Solution

将王子抽象成点,将公主抽象成边。对于一个公主,设其备选的两个王子为 x,yx, y,需要的嫁妆为 zz。连一条无向边 (x,y,z)(x, y, z)

一条边需要和这条边的一个端点配对,一个端点只能与与其相连的一条边配对。可以理解为每个节点至多选择一条出边,故选出的每个连通块要么是树、要么是基环树。故本题要求的是最大生成基环树森林

考虑 Kruskal,对于一条边 (x,y,z)(x, y, z),当且仅当以下情况可以加入:

  • x,yx, y 不连通,且 x,yx, y 所在的连通块不能均为基环树。
  • x,yx, y 连通,且所在的连通块不为基环树(但是加入这条边之后,所在的连通块就变成基环树了)。

使用并查集维护连通性,再额外记录一下每个连通块是否为基环树即可。