POJ1659 Frogs' Neighborhood(Havel定理)

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

  • 可图化的判定: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定理来判定,并且用上述方法来构造出一个解:

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 using namespace std;
 5
 6 struct Frog{
 7     int pos,deg;
 8     bool operator<(const Frog &f)const{
 9         return deg>f.deg;
10     }
11 }frog[11];
12
13 int n;
14 bool ans[11][11];
15 bool Havel(){
16     for(int i=0; i<n; ++i){
17         sort(frog+i,frog+n);
18         for(int j=1; j<=frog[i].deg; ++j){
19             if(i+j>=n || frog[i+j].deg==0) return 0;
20             --frog[i+j].deg;
21             ans[frog[i].pos][frog[i+j].pos]=ans[frog[i+j].pos][frog[i].pos]=1;
22         }
23     }
24     return 1;
25 }
26
27 int main(){
28     int t;
29     scanf("%d",&t);
30     while(t--){
31         scanf("%d",&n);
32         for(int i=0; i<n; ++i){
33             scanf("%d",&frog[i].deg);
34             frog[i].pos=i;
35         }
36         memset(ans,0,sizeof(ans));
37         if(Havel()){
38             puts("YES");
39             for(int i=0; i<n; ++i){
40                 for(int j=0; j<n; ++j){
41                     printf("%d ",ans[i][j]);
42                 }
43                 putchar(‘\n‘);
44             }
45         }else{
46             puts("NO");
47         }
48         putchar(‘\n‘);
49     }
50     return 0;
51 }

POJ1659 Frogs' Neighborhood(Havel定理)

时间: 2024-07-30 13:41:19

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

poj1659 Frogs&#39; Neighborhood

给n个点,以及每个点的度,求一个可以满足的图. 额正解那个算法没有细看,感觉差不多的. 简单想想,分析一下样例就可以判断出无解的条件, 将点按度数从大到小排序,从大的开始处理,依次与后面点相连, 如果连到后面点的度数已经是0了,或者到最后一个点了这个点还没有连完则无解. #include<cstdio> #include<cstring> #include<vector> #include<queue> #include<iostream> #i

POJ Frogs&#39; Neighborhood havel-hakimi定理 (简单题)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 8263   Accepted: 3504   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

poj 1659 Frogs&#39; Neighborhood Havel-Hakimi定理 可简单图定理

作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4098136.html 给定一个非负整数序列$D=\{d_1,d_2,...d_n\}$,若存在一个无向图使得图中各点的度与此序列一一对应,则称此序列可图化.进一步,若图为简单图,则称此序列可简单图化. 可图化的判定为:$d_1+d_2+ \cdots +d_n=0(mod2)$.即把奇数度的点配对,剩下的变为自环.可简单图化的判定,即Havel-Hakimi定理: 我们把序列$D$变换为非

poj 1659 Frogs&#39; Neighborhood (Havel-Hakimi定理,判断序列是否可图)

链接:poj 1659 中文题不必解释题意... 其实质是给定一个度序列,判断是否可图, 若可图,输出YES,并输出各顶点之间的连边的情况 否则,输出NO 思路:判断一个序列是否可图,直接利用Havel-Hakimi定理即可 判断任意一个序列是否可图的具体过程: (1)先将序列由大到小排序 (2)设最大的度数为 t ,将最大项删除,然后把最大度数后 (不包括自己)的 t 个度数分别减1(意思就是把度数最大的点与后几个点连边) (3)重复上述两步,如果最大度数t超过了剩下顶点的个数, 或者序列中出

POJ 1659 Frogs&#39; Neighborhood Havel-Hakimi定理判断可图

1,Havel-Hakimi定理主要用来判定一个给定的序列是否是可图的. 2,首先介绍一下度序列:若把图 G 所有顶点的度数排成一个序列 S,则称 S 为图 G 的度序列. 3,一个非负整数组成的有限序列如果是某个无向图的序列,则称该序列是可图的. 4,判定过程:(1)按降序排序,进入步骤(2).(2)将第[2,2+s[1]-1]全部减1,若出现负数则不可图,判定结束.若[2,2+s[1]-1]全部变为0,则可图,判定结束.将s[1]删除,跳至步骤(1). #include <algorithm

POJ 1659 Frogs&#39; Neighborhood 可图性判断-Havel定理

Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..., xn,请你给出每两个湖泊之间的相连关系. Input 第一行是测试数据的组数T(0 ≤ T ≤ 20).每组数据包括两行,第一行是整数N(2 < N < 10),第二行是N个整数,x1, x2,..., xn(0 ≤ xi ≤ N

POJ 1659 Frogs&#39; Neighborhood(可图性判定—Havel-Hakimi定理)【超详解】

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9897   Accepted: 4137   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

POJ 1659:Frogs&#39; Neighborhood(Havel-Hakimi定理)

Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 6898   Accepted: 3006   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1 ≤ i ≤ N).如果湖泊Li和Lj之间有水路相连,则青蛙Fi和Fj互称为邻居.现在已知每只青蛙的邻居数目x1, x2, ..

Havel定理 poj1659

http://blog.csdn.net/xcszbdnl/article/details/14174669 代码风格这里的 Frogs' Neighborhood Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 9953   Accepted: 4161   Special Judge Description 未名湖附近共有N个大小湖泊L1, L2, ..., Ln(其中包括未名湖),每个湖泊Li里住着一只青蛙Fi(1