给一个无向图的度序列判定是否可图化,并求方案:

  • 可图化的判定:d1+d2+……dn=0(mod 2)。关于具体图的构造,我们可以简单地把奇数度的点配对,剩下的全部搞成自环。
  • 可简单图化的判定Havel定理):把序列排成不增序,即d1>=d2>=……>=dn,则d可简单图化当且仅当d’={d2-1,d3-1,……d(d1+1)-1, d(d1+2),d(d1+3),……dn}可简单图化。简单的说,把d排序后,找出度最大的点(设度为d1),把它与度次大的d1个点之间连边,然后这个点就可以不管了,一直继续这个过程,直到建出完整的图,或出现负度等明显不合理的情况。

这一题把青蛙看成点,邻居关系看成边,可以知道这是简单图(无重边、自环)。因此用Havel定理来判定,并且用上述方法来构造出一个解:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; struct Frog{
int pos,deg;
bool operator<(const Frog &f)const{
return deg>f.deg;
}
}frog[]; int n;
bool ans[][];
bool Havel(){
for(int i=; i<n; ++i){
sort(frog+i,frog+n);
for(int j=; j<=frog[i].deg; ++j){
if(i+j>=n || frog[i+j].deg==) return ;
--frog[i+j].deg;
ans[frog[i].pos][frog[i+j].pos]=ans[frog[i+j].pos][frog[i].pos]=;
}
}
return ;
} int main(){
int t;
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(int i=; i<n; ++i){
scanf("%d",&frog[i].deg);
frog[i].pos=i;
}
memset(ans,,sizeof(ans));
if(Havel()){
puts("YES");
for(int i=; i<n; ++i){
for(int j=; j<n; ++j){
printf("%d ",ans[i][j]);
}
putchar('\n');
}
}else{
puts("NO");
}
putchar('\n');
}
return ;
}

POJ1659 Frogs' Neighborhood(Havel定理)的更多相关文章

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

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

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

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

  3. POJ1659 Frogs' Neighborhood(青蛙的邻居) Havel-Hakimi定理

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8729   Accepted: 36 ...

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

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

  5. poj1659 Frogs' Neighborhood

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10239   Accepted: 4 ...

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

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

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

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

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

    Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10545   Accepted: 4 ...

  9. Havel定理 poj1659

    http://blog.csdn.net/xcszbdnl/article/details/14174669 代码风格这里的 Frogs' Neighborhood Time Limit: 5000M ...

随机推荐

  1. FineUI第四天---PageManage的概述

    页面级别的配置PageManager控件的配置 每一个使用FineUI控件的页面都必须包含一个PageManager控件,我们可以把PageManager控件看做页面级别的参数配置(相对于Web.co ...

  2. Activity切换后,如i何保存上一个Activit的状态

    在Activity切换中一般有三种方式保存上一个Activity的状态数据.一.全局变量    public static int type = 0;二.SharedPreference      保 ...

  3. [Effective JavaScript 笔记] 第1章:让自己习惯javascript小结

    在这里整理一下,每条对应的提示 第1条:了解使用的js版本 确定应用程序支持的js的版本(浏览器也是应用程序噢) 确保使用的js特性是应用程序支持的(要不写了也运行不了) 总是在严格模式下编写和测试代 ...

  4. index and polymorphic

    http://guides.rubyonrails.org/association_basics.html#polymorphic-associations class CreateStars < ...

  5. Android程序启动加载动画实现

    package com.example.bmob_test.ui;//程序启动动画,图片颜色由浅到深,方法一 import com.example.bmob_test.LogActivity; imp ...

  6. 【OpenStack】OpenStack系列17之OpenStack私有云设计二

  7. javascript 布尔类型值判断

    javascript中,值非null的对象在if()中都会被判断为true: if([]) {// true} if({}) {// true} if(null) {// false} if(&quo ...

  8. iterator与const_iterator及const iterator区别

    如果你传递过来一个const类型的容器,那么只能用const_iterator来遍历.  C++ Code  12345   void Method(const vector<int> v ...

  9. DOS 循环读取txt每一行内容

    在命令行窗口中输入: for /f %i in (f:\mydata.txt) do echo %i 如果要是写成批处理文件run.bat for /f %%i in (f:\mydata.txt) ...

  10. Google map测量工具

    启用Google map的测量工具,测量图上的距离. 打开Google map,左下角看到Google 地图实验室,点开,然后enable相应功能即可. 通过Google map lab还能使我们能够 ...