Still WA#9 求大佬看看
//add n edges to make it double-connect
#include<bits/stdc++.h>
using namespace std;
const int N=5e3+1;
vector<int>G[N],low(N),dfn(N),f(N);
int cnt,idx; stack<int>st;
void dfs(int u,int fa){
dfn[u]=low[u]=++cnt,st.push(u);
for(auto v:G[u])
if(!dfn[v]) dfs(v,u),low[u]=min(low[u],low[v]);
else if(dfn[v]<dfn[u]&&v!=fa) low[u]=min(low[u],dfn[v]);
if(low[u]==dfn[u]){
int v;++idx;
do f[v=st.top()]=idx,st.pop();while(v!=u);
}
}
void add(int u,int v){
G[u].push_back(v);
G[v].push_back(u);
}
main(){
cin.tie(0)->sync_with_stdio(0);
int n,m;
cin>>n>>m;
vector<pair<int,int>>ad;
for(int u,v;m--;){
cin>>u>>v; if(u>v)swap(u,v);
ad.push_back({u,v});
}
sort(ad.begin(),ad.end());
unique(ad.begin(),ad.end());
for(auto[u,v]:ad) add(u,v);
dfs(1,0); vector<int>deg(n+1);
for(int u=1;u<=n;++u)
for(int v:G[u])
if(u<v&&f[u]!=f[v]) ++deg[f[u]],++deg[f[v]];
int ans=count_if(deg.begin()+1,deg.begin()+idx+1,[](int x){return x==1;});
cout<<(ans+1)/2;
}