标签:优先队列
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