#P3581. 「CCO 2021」面包优先搜索

「CCO 2021」面包优先搜索

题目描述

有一个由 NN 个城镇和 MM 条无向道路形成的路网。每条路连接一对城镇。政府决定进行一次宽度优先搜索(breadth first search),这意味着找到 NN 个城镇的一个顺序,如果这个排序以 rr 开始,满足:

  • 除了 rr 之外,每个城镇都与排在它之前的某个城镇相邻。
  • 城镇按到 rr 的距离单调不降的顺序给出。这里,距离是指到一个城镇所最少要经过的道路条数。

然而,某个人错误地进行了一次面包(bread)优先搜索。他们找到的排序是 1,2,3,,N1,2,3,\ldots ,N(这个排序是通过按面包产量递增的顺序对城镇排序得到的)。

为了掩饰这个尴尬,政府想要修建一些新的道路,使得 1,2,,N1,2,\ldots,N 也是一个可能的宽度优先搜索排序。新的道路可以在任意两个城市之间新建。请问最少要修建多少条道路?

输入格式

第一行包含两个整数 NNMM

接下来 MM 行,第 ii 行包含两个整数 aia_ibib_i,表示第 ii 条路的两端。保证 aibia_i\neq b_i,并且任意两个城镇之间最多只有一条路。

输出格式

输出一行一个整数,表示最少要修建多少条道路。

2 0

1

6 3
1 3
2 6
4 5

2

数据范围与提示

对于全部数据,$1\le N\le 2\times 10^5,0\le M\le \min(2\times 10^5,\frac{N(N-1)}{2}),1\le a_i,b_i\le N$。

对于 20%20\% 的分数,N200N\le 200

对于另外 24%24\% 的分数,N5000N\le 5000