码迷,mamicode.com
首页 > 其他好文 > 详细

uva10720-图重建

时间:2016-08-20 16:17:20      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:

题目链接 http://acm.hust.edu.cn/vjudge/problem/21421

 

解题思路

容易想到一种贪心策略:每个点都找剩余度数最多的几个点连线。

因为是简单图,所以找过的点不能再连线。

为什么这样对呢,有个定理Havel-Hakimi 。

 

代码

技术分享
#include<stdio.h>
#include<math.h> 
#include<string.h>
#include<algorithm>
#define MAX_LEN 10005
using namespace std;
int degree[MAX_LEN];
int n;
bool CanBuild() 
{
    int i = n - 1;
    while(i>=0) {
        int u = degree[i];
        if(u < 0) return false;
        while(u) {
            if(i - u >= 0) degree[i-u]--;
            else return false;
            if(degree[i-u] < 0) return false;
            u--;
        }
        sort(degree, degree + i);
        i--;
    }
    return true;
}
int main()
{
    scanf("%d", &n);
    while(n != 0) {
        for(int i=0; i<n; i++) scanf("%d", &degree[i]);
        sort(degree, degree+n);
        if(CanBuild()) printf("Possible\n");
        else printf("Not possible\n");
        scanf("%d", &n);
    }
    return 0;
}
View Code

 

uva10720-图重建

标签:

原文地址:http://www.cnblogs.com/ZengWangli/p/5790372.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!