UVa 10720 - Graph Construction

时间:2024-11-13 15:36:20

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

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

 #include <cstdio>
#include <algorithm>
#include <functional>
using namespace std; #define MAXN 10000+10 int a[MAXN];
int n; bool Havel_Hakimi()
{
for (int i = ; i < n-; i++)
{
sort(a+i, a+n, greater<int>());
if (i + a[i] >= n) return false;
for (int j = i+; j <= i+a[i]; j++)
{
a[j]--;
if (a[j] < ) return false;
}
}
if (a[n-]) return false;
return true;
} int main()
{
#ifdef LOCAL
freopen("in", "r", stdin);
#endif
while (scanf("%d", &n) && n)
{
for (int i = ; i < n; i++)
scanf("%d", &a[i]);
if (Havel_Hakimi()) printf("Possible\n");
else printf("Not possible\n");
}
return ;
}