#19284. 合纵连横

合纵连横

你好!我是你的OI金牌教练。

这一期“历史+编程”特训,我们将穿越到中国历史上最动荡也最精彩的战国时期。我们将结合**“合纵连横”**的外交策略,来讲解图论中最基础也最重要的概念——图的遍历与连通块 (Connected Components)

这道题目符合 GESP 6级 难度。GESP 6级要求掌握基本的图的存储(邻接表)以及广度优先搜索 (BFS)深度优先搜索 (DFS) 来解决连通性问题。


第一部分:背景知识讲解

1. 战国七雄 (The Seven Warring States)

战国时期(公元前475年—公元前221年),诸侯兼并,最终形成了齐、楚、燕、韩、赵、魏、秦七个强大的诸侯国,史称“战国七雄”。

2. 合纵与连横 (Vertical and Horizontal Alliances)

为了在激烈的兼并战争中生存,各国之间展开了复杂的外交斗争。

  • 合纵 (Hezong):苏秦主张“合众弱以攻一强”,即六国结盟共同抵抗强秦。南北为纵,故称合纵。
  • 连横 (Lianheng):张仪主张“事一强以攻众弱”,即秦国拉拢一些国家去攻打其他国家。东西为横,故称连横。

3. 算法模型:连通性

在外交结盟中,存在一种传递性: 如果 赵国魏国 结盟,魏国楚国 结盟,那么在战略上,赵、魏、楚 三国就形成了一个同盟集团。 在计算机科学中,我们将国家看作节点 (Vertex),结盟关系看作边 (Edge)。 一个相互之间都有直接或间接结盟关系的国家集合,就是一个连通块 (Connected Component)


第二部分:题目内容

题目名称:合纵连横 (Alliance Strategy)

题目描述

战国时期,局势瞬息万变。地图上共有 NN 座城池,编号为 11NN。 为了抵御强敌,各城池之间签署了 MM 份结盟条约。 第 ii 份条约规定:城池 uiu_i 和城池 viv_i 建立同盟关系。 注意:同盟关系具有传递性。如果 A 和 B 结盟,B 和 C 结盟,那么 A、B、C 三座城池就被视为处于同一个同盟集团中。

作为纵横家,你需要分析当前的天下大势。请你编写程序,计算出:

  1. 当前天下共有多少个独立的同盟集团
  2. 在所有同盟集团中,规模最大(包含城池数量最多)的集团有多少座城池?

输入格式

第一行包含两个正整数 N,MN, M

  • NN 表示城池的数量。
  • MM 表示结盟条约的数量。

接下来 MM 行,每行包含两个正整数 u,vu, v,表示城池 uuvv 之间建立了一条结盟关系(无向边)。

输出格式

输出一行,包含两个整数,中间用空格隔开。

  • 第一个整数表示独立同盟集团的数量(连通块个数)。
  • 第二个整数表示最大的同盟集团包含的城池数。

输入输出样例 #1

输入:

6 4
1 2
2 3
4 5
5 6

输出:

2 3

样例 #1 解释:

  • 关系:1-2, 2-3。于是 {1, 2, 3} 形成一个同盟集团,大小为 3。
  • 关系:4-5, 5-6。于是 {4, 5, 6} 形成一个同盟集团,大小为 3。
  • 共有 2 个集团。
  • 最大的集团大小为 3。

输入输出样例 #2

输入:

5 3
1 2
2 3
1 3

输出:

3 3

样例 #2 解释:

  • 关系:1-2, 2-3, 1-3。这三座城构成一个三角形的同盟 {1, 2, 3},大小为 3。
  • 城池 4 没有结盟,自己算一个集团 {4},大小为 1。
  • 城池 5 没有结盟,自己算一个集团 {5},大小为 1。
  • 共有 3 个集团({1,2,3}, {4}, {5})。
  • 最大的集团大小为 3。

数据范围

对于 100%100\% 的数据:

  • 1N1051 \le N \le 10^5
  • 0M2×1050 \le M \le 2 \times 10^5
  • 1u,vN1 \le u, v \le N
  • 可能存在重边或自环(虽然对连通性无影响,但程序需兼容)。