A5414 | Cyclic Components
时间限制1s
内存限制128MB
通过 / 提交0/0
题目描述
给定一张 $n$ 个点,$m$ 条边的无向图。保证无重边、无自环。在该图的所有连通块中,你需要找出环的个数。
无向图的环的定义如下:
原无向图中的一个子图被定义为环,当且仅当它的点集重新排序后可以满足如下条件:
根据定义,一个环至少需要包含三个点,且边数与点数应当是相同的。

例如对于上图,共有 $6$ 个联通块,但只有 $[7,10,16]$ 和 $[5,11,9,15]$ 这两个联通块是环。
无向图的环的定义如下:
原无向图中的一个子图被定义为环,当且仅当它的点集重新排序后可以满足如下条件:
- 第一个点与第二个点通过一条边相连接;
- 第二个点与第三个点通过一条边相连接;
- ……
- 最后一个点与第一个点通过一条边相连接。
- 所有的边都应当是不同的。
- 其边集不应当包含除了以上所述的边以外的任何边。
根据定义,一个环至少需要包含三个点,且边数与点数应当是相同的。

例如对于上图,共有 $6$ 个联通块,但只有 $[7,10,16]$ 和 $[5,11,9,15]$ 这两个联通块是环。
输入格式
第一行两个整数 $n$ 和 $m$ $(1 \le n \le 2 \cdot 10^5, 0 \le m \le 2 \cdot 10^5)$,分别表示图的点数和无向边数。
接下来 $m$ 行,第 $i$ 行包含两个整数 $v_i, u_i$ $(1 \le v_i, u_i \le n, u_i \not = v_i)$,表示第 $i$ 条边连接着 $v_i$ 与 $u_i$ 两点。
接下来 $m$ 行,第 $i$ 行包含两个整数 $v_i, u_i$ $(1 \le v_i, u_i \le n, u_i \not = v_i)$,表示第 $i$ 条边连接着 $v_i$ 与 $u_i$ 两点。
输出格式
输出一行一个整数,表示环的个数。
输入输出样例
输入 #1
5 4 1 2 3 4 5 4 3 5
输出 #1
1
输入 #2
17 15 1 8 1 12 5 11 11 9 9 15 15 5 4 13 3 13 4 3 10 16 7 10 16 7 14 3 14 4 17 6
输出 #2
2
样例说明
在第一个样例中,只有 $[3, 4, 5]$ 这个联通块是一个环。
第二个样例就对应着题目解释中的图片。
在第一个样例中,只有 $[3, 4, 5]$ 这个联通块是一个环。
第二个样例就对应着题目解释中的图片。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?