#CSP1204. 匹配 (match)

    ID: 4559 Type: Default File IO: match 2000ms 256MiB Tried: 12 Accepted: 0 Difficulty: 10 Uploaded By: Tags>CSP-S复赛模拟国庆集训

匹配 (match)

题目描述

小 Y 最近提出了一个图论问题:MCMMPDNT(Minimum Cost Maximum Matching Problem based on the Depth of Nodes in a Tree)。

给定一棵 nn 个节点的树,其中以节点 11 为根。两个节点的距离定义为连接它们的简单路径上的边数。定义第 ii 个节点的深度为节点 ii 和根之间的距离。数据可以保证,除了深度 00 之外,每个深度都有偶数个节点。

小 Y 随后创建了一个新的无向图 GG,其中包含 nn 个节点。如果节点 ii 和节点 j (ij)j\ (i\not = j) 在树上具有相同的深度,则 GG 中会有一条无向边连接节点 ii 和节点 jj ,该边的权重是树上节点 ii 与节点 jj 之间的距离。

对于图 G=(VE)G=(V,E)GG 中的匹配 MM 是一些顶点不交的边;也就是说,没有两条边连接到同一个顶点。最大匹配是指包含最多的边的匹配。匹配 MM 的权是 MM 中边的权重之和。

现在的问题是:图 GG 的最小权最大匹配的权是多少?

小 Y 试图使用带花树算法(无向图的匹配算法)来解决这个问题,但它似乎太慢了。你能设计一个更快的算法来解决这个问题吗?

输入格式

match.in 文件读入数据。

第一行包含一个整数 nn,表示树上的节点数。

接下来 n1n-1行,每行包含两个整数uiviu_i,v_i,表示树的一条边。

保证输入形成一棵树,并且除了深度 00 之外,每个深度都有偶数个节点。

输出格式

输出到 match.out 文件。

一个整数,表示 GG 的最小权最大匹配的权。

样例 1

7
1 2
1 3
2 4
2 5
2 6
3 7
8

一个最小权最大匹配是选择 {(2,3),(4,5),(6,7)}\{(2,3), (4,5),(6,7)\},权为 =2+2+4=8=2+2+4=8

样例 2

点击链接 ex_match2.inex_match2.out 下载大样例 2 的输入数据和输出数据。

数据范围

对于每个测试点, 保证 1n106,1ui,vin1\le n\le 10^6, 1\le u_i,v_i\le n

子任务 分数 附加约束条件
11 1010 n10n\le 10
22 1515 n20n\le 20
33 2020 n1000n\le 1000
44 2525 n105n\le 10^5
55 3030 无附加限制