#wXTTJlydlt60x6602. 网络 Network

网络 Network

好的,这是整理好的题面,不含解题思路,只包含样例解释。


题目描述

给定一张 NN 个点 MM 条边的无向连通图,然后执行 QQ 次操作,每次向图中添加一条边,并且询问当前无向图中**“桥”**的数量(桥:一条边被删除后,图变得不连通)。


输入格式

输入包含多组测试数据。
每组数据格式:
第一行两个整数 NNMM
接下来 MM 行,每行两个整数 A,BA,B,表示点 AA 和点 BB 之间有一条边。
接下来一行一个整数 QQ
再接下来 QQ 行,每行两个整数 A,BA,B,表示在 AABB 之间加一条边(永久加入,后续查询基于加入后的图)。

当输入 0 0 时表示输入终止。

输出格式

每组数据第一行输出 Case x:,其中 xx 为组别编号,从 1 开始。
接下来 QQ 行,每行输出一个整数,表示一次询问(添加边后)的桥的数量。
每组数据输出完毕后,输出一个空行。

数据范围

  • 1N1051 \le N \le 10^5
  • N1M2×105N-1 \le M \le 2\times 10^5
  • 1ABN1 \le A \neq B \le N
  • 1Q10001 \le Q \le 1000

输入样例

3 2
1 2
2 3
2
1 2
1 3
4 4
1 2
2 1
2 3
1 4
2
1 2
3 4
0 0

输出样例

Case 1:
1
0

Case 2:
2
0


样例解释

第一组数据

N=3,M=2N=3,M=2
初始边:1-2, 2-3
初始桥的数量:两条边都是桥(因为去掉任一条图不连通),共 2 条桥。
但题目是先询问还是先加边?注意读题:每次先添加一条边,然后询问当前桥的数量。

操作:

  1. 加边 1-2
    此时图有边:1-2(两条?输入已经有 1-2,再加一条 1-2,但图无重边,所以不变)
    所以加边前后图一样:边 1-2, 2-3,桥的数量 2 条。
    但输出第一行是 1,说明可能初始时 1-2 不是桥?检查:
    初始图:1-2, 2-3。如果去掉 1-2,剩下 2-3,点 1 孤立,所以 1-2 是桥。如果去掉 2-3,点 3 孤立,所以 2-3 是桥。
    所以初始有 2 个桥。加边 1-2 后,因为已经有边 1-2,图无变化,还是 2 个桥。但输出第一行是 1,这意味着可能我理解错顺序,也许是询问时是在加这条新边之后(并且允许加重复边,形成重边时这两条边都不是桥),我们一步步来:

实际数据输出第一行是 1,第二行是 0。
推测过程:
初始:1-2(桥),2-3(桥),桥数 2。
第一次操作:加边 1-2(形成重边),这时 1-2 之间的两条边都不是桥,因为去掉一条还有另一条。
此时桥只剩下 2-3 一条,所以桥数 1。输出 1。
第二次操作:加边 1-3,形成环 1-2-3-1,所有边都在环上,没有桥了,桥数 0。输出 0。

这样符合输出。


第二组数据

N=4,M=4N=4,M=4
初始边:1-2, 2-1(这是重复边?实际输入是 1-2 和 2-1,可能表示重边),2-3, 1-4。
初始图:
1 与 2 有两条平行边,1 与 4 有边,2 与 3 有边。
桥分析:1-4 是桥(去掉后 4 孤立),2-3 是桥(去掉后 3 孤立),1-2 之间的两条边都不是桥(因为有两条平行)。
初始桥数 = 2。

操作:

  1. 加边 1-2,那么 1-2 之间有三条平行边,显然不是桥。其他边不变,桥数还是 2。输出 2。
  2. 加边 3-4,现在 3 和 4 连通了,可能形成环,检查桥的变化:
    原来 1-4 是桥,2-3 是桥,加边 3-4 后形成路径 4-3-2-1-4(因为 1-2 有多条边),环形成,所有边都不是桥了,桥数 0。输出 0。

最终输出

Case 1:
1
0

Case 2:
2
0