Think:
1知识点:优先队列
2题意分析:去掉任意一条边,图仍是连通图,每个结点度数大于等于2
以下为Accepted代码
#include <bits/stdc++.h>
using namespace std;
int deg[10004];
int main(){
int T, n, m, u, v, cnt, x, y;
priority_queue<int> q;
scanf("%d", &T);
while(T--){
scanf("%d %d", &n, &m);
memset(deg, 0, sizeof(deg));
for(int i = 1; i <= m; i++){
scanf("%d %d", &u, &v);
deg[u]++, deg[v]++;
}
while(!q.empty()){
q.pop();
}
for(int i = 1; i <= n; i++){
if(deg[i] < 2)
q.push(deg[i]);
}
cnt = 0;
while(q.size() >= 2){
x = q.top();
q.pop();
y = q.top();
q.pop();
x++, y++, cnt++;
if(x < 2)
q.push(x);
if(y < 2)
q.push(y);
}
if(q.size() > 0)
cnt++;
printf("%d\n", cnt);
}
return 0;
}
/***************************************************
User name:
Result: Accepted
Take time: 16ms
Take Memory: 292KB
Submit time: 2017-07-14 16:56:06
****************************************************/