#6479. B:保持冷静,保持社交距离 (Keep Calm and Social Distancing)

B:保持冷静,保持社交距离 (Keep Calm and Social Distancing)

题目 B:保持冷静,保持社交距离 (Keep Calm and Social Distancing)

属性 规格
输入文件 标准输入 (Standard Input)
输出文件 标准输出 (Standard Output)
时间限制 C++: 2s / Java: 4s / Python: 20s
内存限制 1024 MB

题目描述

一场盛大的技术会议即将在下周举行。你刚收到邀请,准备去和软件开发大咖们交流。你开发了一款新应用,想尽可能多地向参会者推广,但你发现时间只够见 KK 个人。

由于 2020 年的特殊情况,所有人必须保持社交距离。为了让你的应用推广最有效,你决定挑选 KK彼此之间距离最远的参与者。

社交距离的定义:

  • 共有 NN 名参与者(编号 11NN)。
  • 每个参与者最多只有两个朋友
  • 友谊是双向的(A 是 B 的朋友,则 B 也是 A 的朋友)。
  • 两人之间的社交距离 dist(A,B)dist(A, B) 是连接 A 和 B 的最短社交关系链的长度。
    • 如果 A 和 B 是朋友,dist=1dist = 1
    • 如果 A 和 B 不是朋友但有共同好友,dist=2dist = 2
    • 如果 A 和 B 之间不存在任何连接路径,dist=dist = \infty(无穷大)。
  • 一个集合 SS 的社交距离 dist(S)dist(S) 定义为集合中任意两个不同成员之间 distdist最小值

任务: 找到一个包含 KK 个人的集合 SS,使得 dist(S)dist(S) 最大化。即:让这 KK 个人中距离最近的那一对人的距离尽可能大。

输入格式

  • 第一行包含三个空格分隔的整数:NN(参与者人数,2N1062 \le N \le 10^6)、MM(好友关系对数,0MN0 \le M \le N)和 KK(你要见的人数,2KN2 \le K \le N)。
  • 接下来的 MM 行,每行包含两个整数 ai,bia_i, b_i,表示 aia_ibib_i 是朋友。保证没有重复的友谊,且不会有人和自己是朋友。

输出格式

输出两行:

  1. 第一行:挑选出的 KK 个人之间的最小距离的最大值。如果这 KK 个人可以完全互不相通,则输出单词 infinity
  2. 第二行:这 KK 个人的编号(顺序不限)。