Cyclic Components
题 意:n个点,m条边。问有多少环是标准环,什么是标准环呢?必须是1-2-3-…-n-1而没有其他边的环才是标准环,也就是说顶点一次相连,而没有其他边.
输入范围:
1<=n,m<=2e5
输入样例:
5 4
1 2
3 4
5 4
3 5
输出样例:
1
输出样例:
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。
收 获:对图论的理解更加深刻了
#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e5+5;
struct node{
int to;
};
vector<node> edge[maxn];
bool vis[maxn];
int n,m;
int ans;
int f;
void dfs(int u){
vis[u] = true;
if(edge[u].size() != 2)f=0;
for(int i=0;i<edge[u].size();i++){
int to = edge[u][i].to;
if(!vis[to])dfs(to);
}
}
int main(){
ans = 0;
scanf("%d %d",&n,&m);
for(int i=0;i<m;i++){
int u,v;
scanf("%d %d",&u,&v);
node e;
e.to = v;
edge[u].push_back(e);
e.to = u;
edge[v].push_back(e);
}
for(int i=1;i<=n;i++){
if(!vis[i]){
f = 1;
dfs(i);
if(f){
ans++;
}
}
}
printf("%d\n",ans);
return 0;
}