cf 977e 思维 + dfs
发布日期:2021-05-06 15:25:32 浏览次数:12 分类:技术文章

本文共 777 字,大约阅读时间需要 2 分钟。

题意:

n个点m条边的无向图,问有几个环,这个环上的点必须只有一个前驱和一个后继。

题解:

1.第1次dfs把度数不是2的点所在连通块上的点全部标记。

2.第2次dfs计算所有未标记的点的连通块数,有几个连通块就是几个环。

#include
#define N 200005#define mod 998244353using namespace std ;int n , m ;vector
edge[N] ;bool vis[N] ;void dfs(int u){ int v ; int i , j ; vis[u] = 1 ; for(i = 0 ; i < edge[u].size() ; i ++) { v = edge[u][i] ; if(!vis[v]) dfs(v) ; }}int main(){ int i , j ; int u , v ; int num = 0 ; scanf("%d%d" , &n , &m) ; for(i = 0 ; i < m ; i ++) { scanf("%d%d" , &u , &v) ; edge[u].push_back(v) ; edge[v].push_back(u) ; } memset(vis , 0 , sizeof(vis)) ; for(i = 1 ; i <= n ; i ++) if(!vis[i] && edge[i].size() != 2) dfs(i) ; for(i = 1 ; i <= n ; i ++) { if(!vis[i]) { dfs(i) ; num ++ ; } } printf("%d" , num) ;}

 

上一篇:cf 977f 基础dp
下一篇:cf 1102f 思维 + 排序

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月25日 05时12分58秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章