思路:n最大才100,一共n+1条边,最多删去两条边会使图仍然连通,所有遍历所有删去一条边和两条边的情况
#include <cstdio>
#include <iostream>
using namespace std;
const int N = 105;
int u[N],v[N],fa[N];
int n,ans,cnt;
int find(int x){
return fa[x]==x?x:fa[x]=find(fa[x]);
}
void merge(int x,int y){
int fx = find(x);
int fy = find(y);
if(fx != fy){
fa[fx] = fy;
cnt--;
}
}
int main(){
int t;scanf("%d",&t);
while(t--){
scanf("%d",&n);
ans = 0;
for(int i = 0;i <= n;i++) scanf("%d%d",u+i,v+i);
for(int i = 0;i <= n;i++){
for(int j = i;j <= n;j++){
for(int k = 0;k <= n;k++) fa[k]=k;
cnt = n;
for(int k = 0;k <= n;k++){
if(k == i||k == j) continue;
merge(u[k],v[k]);
}
if(cnt == 1) ans++;
}
}
printf("%d\n",ans);
}
return 0;
}