标签:优先队列
2 3 1 1 2 3 2 1 2 2 3
2 1
ps:Orz陶神
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <iostream>
#include <queue>
using namespace std;
struct cmp
{
bool operator()(const int &a,const int &b)
{
return a>b;
}
};
int sum[1000010];
int main()
{
int T;
int n,m,i,j;
int u,v;
scanf("%d",&T);
while(T--)
{
priority_queue<int ,vector<int >,cmp>q;
memset(sum,0,sizeof(sum));
scanf("%d %d",&n,&m);
for(i=1;i<=m;i++)
{
scanf("%d %d",&u,&v);
sum[u]++;
sum[v]++;
}
sort(sum+1,sum+n+1);
//for(i=1;i<=n;i++)
//printf("%d<<",sum[i]);
for(j=1;j<=n;j++)
{
if(sum[j]<2)
q.push(sum[j]);
else
break;
}
int a,b,cnt=0;
while(q.size()>=2)
{
a=q.top();
q.pop();
b=q.top();
q.pop();
a+=1;
b+=1;
cnt++;
if(a<2)
q.push(a);
if(b<2)
q.push(b);
}
if(!q.empty())
{
cnt=cnt+1;
}
printf("%d\n",cnt);
}
return 0;
}
标签:优先队列
原文地址:http://blog.csdn.net/u013486414/article/details/41497679