#gigacode2019g. [gigacode_2019_g]ギガ国の道路事情

[gigacode_2019_g]ギガ国の道路事情

问题描述

Giga国有 NN 个城市,分别以编号 1,2,3,,N1, 2, 3, \dots, N 进行标记。

一些城市之间通过道路相连。具体来说,有 MM 条道路,第 ii 条道路连接城市 aia_ibib_i(双向)。通过一些道路,任意两个城市之间都可以到达。

定义 d(i,j)d(i, j) 为城市 iijj 之间的距离,即只使用道路从城市 ii 到城市 jj 所需的最小道路数量。

求所有不同的城市对 (x,y)(x, y) 的距离 d(x,y)d(x, y) 的总和。

约束条件

  • 1N100,0001 \leq N \leq 100,000
  • 1M100,0001 \leq M \leq 100,000
  • N1MN+777N - 1 \leq M \leq N + 777
  • 1ai,biN1 \leq a_i, b_i \leq N
  • aibia_i \neq b_i
  • 任何 (u,v)(u, v) 的组合中,直接连接城市 uu 和城市 vv 的道路最多只有 1 条。
  • 任意两个城市之间都可以通过道路到达。
  • 输入都是整数

部分得分

此问题分为若干子任务,只有在所有子任务的测试用例中都正确才会被视为“通过该子任务”。
提交的源代码的得分是通过所有通过的子任务得分之和。

  1. (9 分) N100,M100N \leq 100, M \leq 100
  2. (7 分) N3,000,M3,000N \leq 3,000, M \leq 3,000
  3. (12 分) 满足 MN=1M - N = -1
  4. (13 分) 满足 MN=0M - N = 0
  5. (28 分) 满足 MN7M - N \leq 7,并且对于 1iN11 \leq i \leq N-1,满足 ai=i,bi=i+1a_i = i, b_i = i+1
  6. (22 分) 满足 MN77M - N \leq 77
  7. (9 分) 没有额外的约束。

输入

从标准输入中以以下格式给出输入:

NN MM a1a_1 b1b_1 a2a_2 b2b_2 : : aMa_M bMb_M

输出

请输出所有城市 x,yx, y 之间的距离 d(x,y)d(x, y) 的总和。

注意

由于输入输出规模较大,建议使用快速输入输出(比如 C++ 中的 scanf/printf)来优化程序性能。

输入示例 1

4 3
1 2
2 3
3 4

输出示例 1

10

Giga国的道路网络如下所示:

在这个道路网络中,$d(1, 2) = 1, d(1, 3) = 2, d(1, 4) = 3, d(2, 3) = 1, d(2, 4) = 2, d(3, 4) = 1$,因此答案为 1+2+3+1+2+1=101+2+3+1+2+1=10

输入示例 2

4 6
1 2
1 3
1 4
2 3
2 4
3 4

输出示例 2

6

Giga国的道路网络如下所示:

在这个道路网络中,任意两个城市之间的距离都是 1,因此答案为 6。

输入示例 3

9 12
1 2
2 3
4 5
5 6
7 8
8 9
1 4
4 7
2 5
5 8
3 6
6 9

输出示例 3

72