忘记考虑重边,要改成while跑到余量为0才走。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
int vis[10000+5];
int g[1000+5][1000+5];
int res=0;
int n,m;
void dfs(int id){
/*printf("id=%d\n,vis=%d\n",id,vis[id]);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
printf(" %d",g[i][j]);
}
printf("\n");
}*/
if(vis[id]==0){
vis[id]=1;
for(int j=0;j<n;j++){
while(g[id][j]){
//就是这里
g[id][j]--;
g[j][id]--;
dfs(j);
}
}
}
else{
res++;
//printf("res=%d\n",res);
}
}
int main(){
while(cin>>n>>m){
for(int i=0;i<10000+5;i++)
vis[i]=0;
for(int i=0;i<1000+5;i++)
for(int j=0;j<1000+5;j++)
g[i][j]=0;
res=0;
while(m--){
int a,b;
cin>>a>>b;
g[a][b]++;
g[b][a]++;
}
for(int i=0;i<n;i++){
if(vis[i]==0)
dfs(i);
}
printf("%d\n",res);
}
}