#HK5349. 「POI2008 R3」王国划分 Subdivision of Kingdom

「POI2008 R3」王国划分 Subdivision of Kingdom

题目描述

题目译自 XV OI Olimpiada Informatyczna – III etap Podział Królestwa

拜托西亚国王 Bajtazar 决定退休。他有两个儿子,但他无法决定由哪个儿子继任王位。因此,他决定将王国一分为二,让两个儿子分别统治一半的领土。

在王国划分后,必须在连接两半王国的道路上建造哨所。由于建造哨所需要成本,连接两半王国的道路数量应尽可能少。

拜托西亚由偶数个城市组成,这些城市通过道路相连。划分后,每一半王国应包含一半数量的城市。每条道路连接两个城市。道路之间不在城市以外的地方相交或交叉,但可以有立交桥或隧道。任意两个城市之间最多有一条直接连接的道路。

在划分王国时,哪些城市属于哪一半非常重要。你可以假设城市以外的区域可以划分得当,使得连接同一半王国内城市的道路不会跨越边界。而每条连接不同半王国城市的道路上都需要建造一个哨所。

编写一个程序,完成以下功能:

  • 从标准输入读取城市及连接它们的道路的描述,
  • 确定一种将王国划分为两半的方案,使每一半包含相同数量的城市,且连接不同半王国的道路数量最少,
  • 将结果输出到标准输出。

如果存在多个符合条件的划分方案,你的程序可以输出其中任意一个。

输入格式

输入数据的第一行包含两个整数 nnmm,用单个空格分隔,分别表示城市数量和连接它们的道路数量,2n262 \leq n \leq 26nn 为偶数,0mn(n1)20 \leq m \leq \frac{n \cdot (n-1)}{2}。城市编号从 11nn

接下来的 mm 行,每行包含两个整数,用单个空格分隔。第 (i+1)(i+1) 行(i=1,2,,mi=1,2,\ldots,m)包含数字 uiu_{i}viv_{i}1ui<vin1 \leq u_{i} < v_{i} \leq n,表示连接城市 uiu_{i}viv_{i} 的道路。

输出格式

输出一行,包含 n2\frac{n}{2} 个整数,用单个空格分隔。这些数字应为属于包含城市 11 那一半王国的城市编号,按升序排列。

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

1 2 6

图中用虚线标出了最优划分方案,需要建造 33 个哨所。