#P16664. [Ctu2024]Watchdogs
[Ctu2024]Watchdogs
题目描述
在一个被丘陵和森林包围的小镇 Kocourkov 中,出现了严重的老鼠问题。
小镇中共有 个地点和恰好 条道路。任意两个地点之间都可以通过这些道路互相到达。每条道路连接两个地点,因此整个道路网络是一棵树。
每只老鼠恰好有两个巢穴,并且只在自己的两个巢穴之间往返。每个巢穴都位于某个地点。
人们发现,老鼠在其往返路径的大约中点处最脆弱。
形式化地说,若某只老鼠的两个巢穴分别位于地点 和 ,则地点 是这只老鼠的一个脆弱地点,当且仅当:
-
位于从 到 的简单路径上;
-
满足
其中, 表示地点 与地点 之间的距离,即二者之间路径所经过的道路条数。
因此,一只老鼠可能有不止一个脆弱地点;某个巢穴本身也有可能是脆弱地点。
小镇计划在若干地点放置守望猫。如果一只守望猫所在的地点是某只老鼠的脆弱地点,那么它就可以消灭这只老鼠。
一只守望猫可以消灭任意多只老鼠。守望猫很懒,一旦被放置在某个地点,就会始终待在那里,不会移动。
购买守望猫的费用很高,因此小镇希望使用尽可能少的守望猫,并保证每只老鼠最终都能被消灭。
请计算最少需要放置多少只守望猫。
输入格式
第一行包含两个整数 :
分别表示地点数量和老鼠数量。
接下来 行,每行包含两个整数 (),表示地点 和地点 之间有一条直接道路。
接下来 行,每行包含两个整数 (),表示一只老鼠的两个巢穴分别位于地点 和地点 。
保证 。
输出格式
输出一个整数,表示为了保证所有老鼠最终都被消灭,最少需要放置的守望猫数量。
样例 1
输入
7 5
0 1
0 2
2 5
1 4
4 6
1 3
1 6
1 3
3 2
1 5
2 5
输出
3
图示

样例中的道路树
一种最优方案是在地点 、、 各放置一只守望猫:
- 第一只老鼠被地点 的守望猫消灭;
- 第二只和第三只老鼠被地点 的守望猫消灭;
- 最后两只老鼠被地点 的守望猫消灭。