关于题意和Havel-Hakimi定理,可以看看http://blog.csdn.net/wangjian8006/article/details/7974845

讲得挺好的。

我就直接粘过来了



题目大意:给出一个非负整数的序列,问这个序列是否是可图序列,而是否可图根据

Havel-Hakimi定理的方法来构图

解题思路:Havel-Hakimi定理:

1,一个非负整数组成的有限序列如果是某个无向图的序列,则称该序列是可图的。

2,判定过程:

(1)对当前数列排序,使其呈非递增序列

(2)从第二个数开始对其后d[1]个数字减1,d[1]代表排序后第1个数的值

(3)然后删除第一个之后对剩下的数继续排序

(3)一直循环直到当前序列出现负数(即不是可图的情况)或者当前序列全为0 (可图)时退出。

3,举例:

序列S:7,7,4,3,3,3,2,1

删除序列S的首项 7 ,对其后的7项每项减1,

得到:6,3,2,2,2,1,0,

继续删除序列的首项6,

对其后的6项每项减1,

得到:2,1,1,1,0,-1,

到这一步出现了负数,因此该序列是不可图的

再举例:

序列:4 3 1 5 4 2 1

排序之后:5 4 4 3 2 1 1

删除5对后面5个数减1操作

3 3 2 1 0 1

排序

3 3 2 1 1 0

删除3对后面3个数减1操作

2 1 0 1 0

排序

2 1 1 0 0

删除2 对后面2个数减1操作

0 0 0 0

全为0,可图

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int flag,n,cas;
bool map[25][25];
struct node{int i,wei;}d[21];
void print()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
printf("%d ",map[i][j]);
printf("\n");
}
printf("\n");
}
bool cmp(const node &a,const node &b){return a.wei>b.wei;}
int main()
{
scanf("%d",&cas);
for(int ii=1;ii<=cas;ii++)
{
memset(map,0,sizeof(map));
scanf("%d",&n);
for(int i=1;i<=n;i++)
d[i].i=i,scanf("%d",&d[i].wei);
while(1)
{
flag=1;
sort(d+1,d+n+1,cmp);
for(int i=2;i<=1+d[1].wei;i++)
{
map[d[1].i][d[i].i]=map[d[i].i][d[1].i]=1;
d[i].wei--;
if(d[i].wei<0){flag=2;break;}
}
d[1].wei=0;
if(flag==2){printf("NO\n\n");break;}
for(int i=1;i<=n;i++)
if(d[i].wei!=0){flag=0;break;}
if(flag==1){printf("YES\n");print();break;}
}
}
}

POJ 1659 Havel-Hakimi定理的更多相关文章

  1. POJ1659 Frogs' Neighborhood(Havel–Hakimi定理)

    题意 题目链接 \(T\)组数据,给出\(n\)个点的度数,问是否可以构造出一个简单图 Sol Havel–Hakimi定理: 给定一串有限多个非负整数组成的序列,是否存在一个简单图使得其度数列恰为这 ...

  2. poj 1659(havel算法)

    题目链接:http://poj.org/problem?id=1659 思路:  havel算法的应用: (1)对序列从大到小进行排序. (2)设最大的度数为 t ,把最大的度数置0,然后把最大度数后 ...

  3. POJ 1659 Frogs' Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 41 ...

  4. poj 1659 Frogs&#39; Neighborhood 度序列可图化 贪心

    题意: 对一个无向图给出一个度序列,问他是否可简单图化. 分析: 依据Havel定理,直接贪心就可以. 代码: //poj 1659 //sep9 #include <iostream> ...

  5. Frogs‘ Neighborhood(POJ 1659 C/C++)

    poj 1659 Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路 ...

  6. poj 1659 Frog's Neighborhood

    未名湖附近共有N个大小湖泊L1, L2, -, Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只 ...

  7. POJ 1659 Frogs' Neighborhood (Havel定理构造图)

    题意:根据图的度数列构造图 分析:该题可根据Havel定理来构造图.Havel定理对可图化的判定: 把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d ...

  8. POJ 1659 Frogs' Neighborhood(Havel-Hakimi定理)

    题目链接: 传送门 Frogs' Neighborhood Time Limit: 5000MS     Memory Limit: 10000K Description 未名湖附近共有N个大小湖泊L ...

  9. poj 1659 Frogs' Neighborhood(出入度、可图定理)

    题意:我们常根据无向边来计算每个节点的度,现在反过来了,已知每个节点的度,问是否可图,若可图,输出一种情况. 分析:这是一道定理题,只要知道可图定理,就是so easy了  可图定理:对每个节点的度从 ...

  10. poj 1659 Frogs' Neighborhood Havel-Hakimi定理 可简单图定理

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098136.html 给定一个非负整数序列$D=\{d_1,d_2,...d_n\}$,若存 ...

随机推荐

  1. js的加法操作表

    Number + Number -> 加法 Boolean + Number -> 加法 Boolean + Boolean -> 加法 Number + String -> ...

  2. 远程连接阿里云服务器ping不通ip解决方案

    搭建了阿里云服务器,发现本地ping不通,查看半天才发现,原来是在阿里云上的安全组少了些东西.  在出入方向上新建一个安全组,就可以搞定了.

  3. LINUX-查看进程内环境变量

    ps -ef find PID cat /proc/$PID/environ | grep ENV

  4. 好用的JS数字格式化

    /* *js格式化数字代码 * *value: 要格式化的数字值 *scale: 最多保留几位小数 *zeroed: 是否保留尾0 *percented: 是否转称百分比形式 * */ functio ...

  5. 多层gmetad配置

    经实验表明: ①多层gmetad与ganglia版本无关,且可以多版本兼容 ②多层gmetad只有最底层gmetad能保存详细指标,非底层gmetad收集到的都只能是summary信息,当然也许我配置 ...

  6. (39.2). Spring Boot Shiro权限管理【从零开始学Spring Boot】

    (本节提供源代码,在最下面可以下载) (4). 集成Shiro 进行用户授权 在看此小节前,您可能需要先看: http://412887952-qq-com.iteye.com/blog/229973 ...

  7. Java_集合总结

    集合分类 Collection 接口是集合的父类 1.Set 集合 使用内部的排列机制(无序),存入集合的顺序和取出集合的顺序不一致,没有索引,存入集合的元素没有重复 HashSet集合 Linked ...

  8. [cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]

    建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点.具体见 ...

  9. [APIO2014] [Uoj103] [Bzoj3676] Palindromes回文串 [Manacher,后缀数组]

    用Manacher算法枚举回文子串,每次在后缀数组排序后的后缀数组中二分,因为用某一后缀和其他子串分别求匹配的长度,匹配长度在排序后该后缀的两侧具有单调性(匹配长度为min{H[x]|i<=x& ...

  10. 某种密码(password.*)

    关于某种密码有如下描述:某种密码的原文A是由N个数字组成,而密文B是一个长度为N的01数串,原文和密文的关联在于一个钥匙码KEY.若KEY=∑▒[Ai*Bi],则密文就是原文的一组合法密码.现在有原文 ...