rt,样例都能返回一个奇怪的值,完全运行不了
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
vector<int>e[maxn];
void addedge(int u,int v){
e[u].push_back(v);
e[v].push_back(u);
}
stack<int>s;//栈,存放答案
int vis[maxn],dfn[maxn],low[maxn],cnt=0,cl[maxn],clnm;
void dfs(int u){
dfn[u]=low[u]=++cnt;
s.push(u);
vis[u]=1;
for(auto i:e[u]){
int v=e[u][i];
if(!dfn[v]){
dfs(v);
low[u]=min(low[u],low[v]);
}else if(vis[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(low[u]==dfn[u]){
clnm++;
while(s.top()!=u){
int t=s.top();
cl[t]=clnm,vis[t]=0,s.pop();
}
int t=s.top();
cl[t]=clnm,vis[t]=0,s.pop();
}
}
int main(){
int n,m,ans=0;
cin>>n>>m;
for(int i=1,u,v;i<=m;i++){
cin>>u>>v;
addedge(u,v);
}
for(int i=1;i<=n;i++){
if(!dfn[i])dfs(i);
}
for(int i=1;i<=clnm;i++){
ans+=(cl[i]>1);
}
cout<<ans;
}