UVa 10720 - Graph Construction

  题目大意:给n个整数, 分别代表图中n个顶点的度,判断是否能构成一张图。

  看到这个题后,除了所有数之和应该为偶数之外,没有别的想法了,只好在网上搜解题报告了。然后了解了Havel-Hakimi定理。之后的事情就简单了。

 1 #include <cstdio>
 2 #include <algorithm>
 3 #include <functional>
 4 using namespace std;
 5 
 6 #define MAXN 10000+10
 7 
 8 int a[MAXN];
 9 int n;
10 
11 bool Havel_Hakimi()
12 {
13     for (int i = 0; i < n-1; i++)
14     {
15         sort(a+i, a+n, greater<int>());
16         if (i + a[i] >= n)  return false;
17         for (int j = i+1; j <= i+a[i]; j++)
18         {
19             a[j]--;
20             if (a[j] < 0)  return false;
21         }
22     }
23     if (a[n-1])  return false;
24     return true;
25 }
26 
27 int main()
28 {
29 #ifdef LOCAL
30     freopen("in", "r", stdin);
31 #endif
32     while (scanf("%d", &n) && n)
33     {
34         for (int i = 0; i < n; i++)
35             scanf("%d", &a[i]);
36         if (Havel_Hakimi())  printf("Possible\n");
37         else  printf("Not possible\n");
38     }
39     return 0;
40 }
View Code

 

posted @ 2013-08-19 18:44  xiaobaibuhei  阅读(208)  评论(0)    收藏  举报