题库/S0126

#S0126. 【22NOIP提高组】建造军营(barrack)

    传统题 难度: 提高 标签>一本通割边与无向图low值状态定义、转移与边界并查集合并与代表元
时间限制1000 ms
内存限制512 MiB
通过率—0 / 0 次提交
题目描述 查看题解 开始编程Alt+E

S0126 · 【22NOIP提高组】建造军营(barrack)

退出在线编程模式
提高 读懂题意,让每一次思考成为成长。
时间限制1000 ms
内存限制512 MiB
通过率—0 / 0 次提交

题目描述

A 国与 B 国正在激烈交战中,A 国打算在自己的国土上建造一些军营。 A 国的国土由 nn 座城市组成,mm 条双向道路连接这些城市,使得任意两座城市均可通过道路直接或间接到达 。A 国打算选择一座或多座城市(至少一座),并在这些城市上各建造一座军营。 众所周知,军营之间的联络是十分重要的。然而此时 A 国接到情报,B 国将会于不久后袭击 A 国的一条道路,但具体的袭击目标却无从得知。如果 B 国袭击成功,这条道路将被切断,可能会造成 A 国某两个军营无法互相到达,这是 A 国极力避免的。因此 A 国决定派兵看守若干条道路(可以是一条或多条,也可以一条也不看守 ),A 国有信心保证被派兵看守的道路能够抵御 B 国的袭击而不被切断。 A 国希望制定一个建造军营和看守道路的方案,使得 B 国袭击的无论是 A 国的哪条道路,都不会造成某两座军营无法互相到达。现在,请你帮 A 国计算一下可能的建造军营和看守道路的方案数共有多少。由于方案数可能会很多,你只需要输出其对1,000,000,0071, 000, 000, 007(109+710^9 + 7) 取模的值即可。两个方案被认为是不同的,当且仅当存在至少一座城市在一个方案中建造了军营而在另一个方案中没有,或者存在至少一条道路在一个方案中被派兵看守而在另一个方案中没有。

输入

第一行包含两个正整数 nn, mm,分别表示城市的个数和双向道路的数量。 接下来 mm 行,每行包含 22 个正整数 uiu_i, viv_i,描述一条连接 uiu_i 和 viv_i 的双向道路。保证没有重边和自环。

输出

输出一行包含一个整数,表示建造军营和看守道路的方案数对 1,000,000,0071, 000, 000, 007(109+710^9 +7) 取模的结果。

输入样例

2 1 
1 2

输出样例

5

提示

【样例 1 解释】 样例中,A 国共有 2 座城市,有 1 条道路连接它们。 所有可能的方案如下: • 在城市 1 建军营,不看守这条道路; • 在城市 1 建军营,看守这条道路; • 在城市 2 建军营,不看守这条道路; • 在城市 2 建军营,看守这条道路; • 在城市 1, 2 建军营,看守这条道路; 【样例 2 输入】

4 4
1 2
2 3
3 1
1 4

【样例 2 输出】

184

【数据范围】 对于所有数据,保证 1≤n≤5×1051 ≤ n ≤ 5 × 10^5,n−1≤m≤106n − 1 ≤ m ≤ 10^6,1≤ui,vi≤n1 ≤ u_i, v_i ≤ n,ui≠viu_i ≠ v_i。

测试点编号 n ≤ m ≤ 特殊条件
1 ∼ 3 8 10 无
4 ∼ 7 16 25
8 ∼ 9 3000 5000
10 ∼ 115 × 105 106特殊性质 A
12 ∼ 14 m = n − 1
15 ∼ 16 m = n
17 ∼ 20 无
特殊性质 A:保证 $m = n − 1$ 且第 $i$ 条道路连接城市 $i$ 与 $i + 1$。

评测数据说明

本题使用按题意独立构造、以独立程序核对的训练数据及公开样例,共5个测试点,非原站或官方原始数据。总分100分。