题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2454
2 6 4 4 3 3 2 2 4 2 1 1 1
yes no
题意:
给出一个图的每一个点的度数,求能否构成一个简单图;
PS:
Havel定理:http://baike.baidu.com/view/8698382.htm?fr=aladdin
代码如下:
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)
{
return a>b;
}
int main()
{
int t,n,i,j;
int a[1010];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
int sum = 0;
for(i=0; i<n; i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
if(sum%2)
{
printf("no\n");
continue;
}
for(i=0; i<n; i++)
{
if(a[i]>=n)
break;
}
if(i<n)
{
printf("no\n");
continue;
}
int flag = 0;
for(i=0; i<n; i++)
{
int cnt=0;
sort(a,a+n,cmp);
for(j=1; j<n; j++)
{
if(cnt==a[0])
break;
a[j]--;
cnt++;
if(a[j] < 0)
{
flag = 1;
break;
}
}
if(flag)
break;
if(cnt==0)
break;
a[0]-=cnt;
}
for(i=0; i<n; i++)
{
//printf("%d ",a[i]);
if(a[i])
break;
}
//printf("\n");
if(i<n || flag)
printf("no\n");
else
printf("yes\n");
}
return 0;
}
/*
4
4 3 2 1 1
*/
HDU 2454 Degree Sequence of Graph G(Havel定理 判断简单图的存在)
原文地址:http://blog.csdn.net/u012860063/article/details/39804611