zoukankan      html  css  js  c++  java
  • POJ 1659 Frogs' Neighborhood

      题目大意:判断一个序列是否可图化。Havel-Hakimi定理的简单应用。

      在看D_Double's Journey的关于Havel-Hakimi定理时提到这道题,就做了一下。可悲的是,因为一些小细节问题WA了两次,无语...

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 using namespace std;
     5 #define MAXN 12
     6 
     7 struct Vertex
     8 {
     9     int d, id;
    10     bool operator < (const Vertex& v) const
    11     {
    12         return d > v.d;
    13     }
    14 };
    15 Vertex vertex[MAXN];
    16 int G[MAXN][MAXN], n;
    17 
    18 bool Havel_Hakimi()
    19 {
    20     for (int i = 0; i < n-1; i++)
    21     {
    22         sort(vertex+i, vertex+n);
    23         if (i + vertex[i].d >= n)  return false;
    24         int x = vertex[i].id;
    25         for (int j = i+1; j <= i+vertex[i].d; j++)
    26         {
    27             vertex[j].d--;
    28             int y = vertex[j].id;
    29             G[x][y] = G[y][x] = 1;
    30             if (vertex[j].d < 0)  return false;
    31         }
    32     }
    33     if (vertex[n-1].d)  return false;
    34     return true;
    35 }
    36 
    37 int main()
    38 {
    39 #ifdef LOCAL
    40     freopen("in", "r", stdin);
    41 #endif
    42     int T;
    43     scanf("%d", &T);
    44     while (T--)
    45     {
    46         scanf("%d", &n);
    47         for (int i = 0; i < n; i++)
    48         {
    49             scanf("%d", &vertex[i].d);
    50             vertex[i].id = i;
    51         }
    52         memset(G, 0, sizeof(G));
    53         if (Havel_Hakimi())  
    54         {
    55             printf("YES
    ");
    56             for (int i = 0; i < n; i++)
    57                 for (int j = 0; j < n; j++)
    58                     printf("%d%s", G[i][j], (j == n-1) ? "
    " : " ");
    59         }
    60         else  printf("NO
    ");
    61         if (T)  printf("
    ");
    62     }
    63     return 0;
    64 }
    View Code
  • 相关阅读:
    冒泡排序
    选择排序
    1069 微博转发抽奖 (20 分)
    动态规划-石子合并
    动态规划-最长公共子序列
    动态规划-最长上升子序列
    动态规划-数字三角形
    动态规划-分组背包问题
    动态规划-多重背包问题
    动态规划-完全背包问题
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3268583.html
Copyright © 2011-2022 走看看