HRBEU ACM 图论 1006

http://acm.hrbeu.edu.cn/index.php?act=problem&id=1006&cid=22

题目的意思:任何一个简单图都有一个度序列(度序列的定义是,对于简单图中每个顶点的度数),那么反过来,任给一个非负整数的非递增序列是不是就一定对应着一个简单图呢?现在题目中就是给你这样的一段非负整数序列然你判断是否可以画出一个简单图。

解题思路:根据Havel定理:对于n>1,大小为n的整数序列d是简单图的度序列,当且仅当d''是简单图的度序列。其中d''是删除d中最大的元素a后(a<n),并且将紧跟的a个最大元素依次减一得到的度序列。含一个元素的简单图的度序列只有是d1=0。

(1)如果度序列的和为奇数,则该度序列肯定不是简单图的度序列。因为一个简单图的度的和为边数的2倍,一定为偶数。

(2)在每次重新排序后判断最后一个元素是否小于零,如果小于零则可直接判断这个序列不是简单图的度序列。

下面就是代码实现了。不过这个代码没有通过,提交后是PE,真的看不出来题目是怎么要求输出的,单个输出,一起输出都尝试了,还是不对,感觉没什么特别的呀

 1 #include<stdio.h>
2 #include<string.h>
3 #include<iostream>
4 #include<algorithm>
5 using namespace std;
6 #define N 1010
7 char str[N][10];
8 int de[N];
9 int cmp(const int a,const int b)
10 {
11 return a>b;
12 }
13 int main()
14 {
15 int t,n;
16 int i,j;
17 int k;
18 cin>>t;
19 //while(cin>>t)
20 //{
21 for(k=0;k<t;k++)
22 {
23 int s=1;
24 cin>>n;
25 for(i=0;i<n;i++)
26 cin>>de[i];
27 sort(de,de+n,cmp);
28 for(i=0;i<n-1;i++)
29 {
30 for(j=1;j<=de[0];j++)
31 {
32 if(j>n-i||de[j]<=0)
33 {
34 s=0;
35 break;
36 }
37 de[j]--;
38 }
39 de[0]=-1;
40 sort(de,de+n,cmp);
41 if(!s) break;
42 }
43 if(!s||de[0]!=0) strcpy(str[k],"no");
44 else if(s==1&&!de[0]) strcpy(str[k],"yes");
45
46 }
47 for(i=0;i<t;i++)
48 cout<<str[i]<<endl;
49 //}
50 return 0;
51 }

 

转载于:https://www.cnblogs.com/fxh19911107/archive/2011/12/07/2279870.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值