#P1161. Walls
Walls
描述
某国家修建了若干长城,每段长城恰好连接两座城镇,且长城之间互不交叉。因此,该国被划分为若干区域,要从一个区域到另一个区域,必须经过某个城镇或跨越某段长城。任意两座城镇A和B之间最多有一段长城直接相连,且从A到B的路径总是存在的(仅通过城镇或长城)。输入格式隐含了额外限制条件。
某俱乐部的成员居住在这些城镇中,每个城镇最多只有一名成员(也可能没有)。成员们希望在某一个区域(不在任何城镇内)会面。他们骑自行车出行,既不想进入任何城镇(因交通问题),又希望尽可能少跨越长城(因跨越困难)。每位成员前往会面区域时需要跨越的长城次数(可能为0)的总和称为"跨越总和",他们希望找到最优会面区域使这个总和最小。
</p>
城镇用1到N的整数编号(N为城镇总数)。例如在图1中,带标签的节点代表城镇,连线代表长城。假设有3名成员分别住在城镇3、6和9,则图2显示了最优会面区域及相应路线,此时跨越总和为2:来自城镇9的成员需要跨越城镇2-4之间的长城,来自城镇6的成员需要跨越城镇4-7之间的长城。
你需要编写程序,根据给定的城镇布局、区域划分和成员居住地,计算最优会面区域及最小跨越总和。
输入
程序从标准输入读取数据:
- 第1行:区域数()
- 第2行:城镇数()
- 第3行:成员数(,)
- 第4行:个严格递增的整数,表示成员所在城镇编号
随后是行区域描述(每区域占2行):
- 奇数行:该区域边界的城镇数
- 偶数行:按顺时针方向排列的个城镇编号(最后一个"外部区域"按逆时针排列)
区域按输入顺序被标记为1,2,...,M(最后一个为外部区域)
输出
程序向标准输出写入:
- 第1行:最小跨越总和
示例
输入数据1
10
10
3
3 6 9
3
1 2 3
3
1 3 7
4
2 4 7 3
3
4 6 7
3
4 8 6
3
6 8 7
3
4 5 8
4
7 8 10 9
3
5 10 8
7
7 9 10 5 4 2 1
输出数据1
2
来源
IOI 2000