题目描述
输入
输出
示例输入
2 3 1 1 2 3 2 1 2 2 3
示例输出
2 1
提示
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
using namespace std;
int a[10010];
int main()
{
int T,n,m,i,u,v,sum;
scanf("%d",&T);
while(T--)
{ sum=0;
priority_queue<int,vector<int>,greater<int> >q;//优先队列若从大到小把greater改成less
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
for(i=0;i<=m-1;i++)
{
scanf("%d%d",&u,&v);
a[u]++;
a[v]++;
}
for(i=1;i<=n;i++)
{
q.push(a[i]);
}
while(q.top()<2)//全部点入度大于2才行
{
int t1=q.top();
q.pop();
int t2=q.top();
q.pop();//拿出两点进行连接
t1++;
t2++;
sum++;
q.push(t1);
q.push(t2);
}
printf("%d\n",sum);
}
return 0;
}