zoukankan      html  css  js  c++  java
  • POJ1659 Frogs' Neighborhood HavelHakimi定理|贪心可图化

      题目链接:http://poj.org/problem?id=1659

      给定无向图的度序列,求出图的可能邻接矩阵。如果该度序列能构成图,则称该序列是可图的。这里就是求度序列是否能可图化,其实算法仔细想下还是能想出来的,当时就想到是排序然后贪心选取了。其过程就是一个Havel-Hakimi定理:

                   1、度序列排序成非升序

                   2、从度序列的第一个数向其后的点构成边,直到其度数用完为止。如果没有用完,则不能可图化。

                   3、如果度数全部用完,则构图完成,否则进行第一步。

     1 //STATUS:C++_AC_0MS_164KB
     2 #include<stdio.h>
     3 #include<stdlib.h>
     4 #include<string.h>
     5 #include<math.h>
     6 #include<iostream>
     7 #include<string>
     8 #include<algorithm>
     9 #include<vector>
    10 #include<queue>
    11 #include<stack>
    12 using namespace std;
    13 #define LL __int64
    14 #define pdi pair<int,int>
    15 #define Max(a,b) ((a)>(b)?(a):(b))
    16 #define Min(a,b) ((a)<(b)?(a):(b))
    17 #define mem(a,b) memset(a,b,sizeof(a))
    18 #define lson l,mid,rt<<1
    19 #define rson mid+1,r,rt<<1|1
    20 const int N=30,M=1000000,INF=0x3f3f3f3f,MOD=1999997;
    21 const LL LLNF=0x3f3f3f3f3f3f3f3fLL;
    22 const double DNF=100000000000;
    23 
    24 struct Node{
    25     int a,id;
    26 }num[N];
    27 int w[N][N];
    28 int T,n;
    29 
    30 int cmp(const Node& a,const Node& b)
    31 {
    32     return a.a>b.a;
    33 }
    34 
    35 int main()
    36 {
    37  //   freopen("in.txt","r",stdin);
    38     int i,j,ok;
    39     scanf("%d",&T);
    40     while(T--)
    41     {
    42         ok=1;
    43         mem(w,0);
    44         scanf("%d",&n);
    45         for(i=0;i<n;i++){
    46             scanf("%d",&num[i].a);
    47             num[i].id=i;
    48         }
    49 
    50         for(i=0;i<n;i++){
    51             sort(num,num+n,cmp);
    52             for(j=1;j<n && num[0].a;j++){
    53                 if(num[j].a){
    54                     num[0].a--;num[j].a--;
    55                     w[num[0].id][num[j].id]=w[num[j].id][num[0].id]=1;
    56                 }
    57              }
    58              if(num[0].a){ok=0;break;}
    59         }
    60 
    61         if(!ok)printf("NO\n");
    62         else {
    63             printf("YES\n");
    64             for(i=0;i<n;i++){
    65                 printf("%d",w[i][0]);
    66                 for(j=1;j<n;j++)
    67                     printf(" %d",w[i][j]);
    68                 putchar('\n');
    69             }
    70         }
    71         if(T)putchar('\n');
    72     }
    73     return 0;
    74 }
  • 相关阅读:
    鼠标放在图片上出现提示
    NSIS调用dll
    IIS7 CMD命令
    NSIS检测
    NSIS修改文件夹访问权限
    NSIS——检测IIS是否安装及版本
    NSIS——检测SQL Server安装版本
    NSIS使用技巧集合
    提供修复界面的NSIS安装包
    NSIS MUI教程
  • 原文地址:https://www.cnblogs.com/zhsl/p/2890587.html
Copyright © 2011-2022 走看看