zoukankan      html  css  js  c++  java
  • PKU1659+havelhakimi定理

    http://www.docin.com/p-540438846.html
    该定理链接。
     1 /*
     2 havel-hakimi定理
     3 http://www.docin.com/p-540438846.html
     4 */
     5 #include<stdio.h>
     6 #include<string.h>
     7 #include<stdlib.h>
     8 #include<algorithm>
     9 #include<iostream>
    10 #include<queue>
    11 #include<map>
    12 #include<math.h>
    13 using namespace std;
    14 typedef long long ll;
    15 //typedef __int64 int64;
    16 const int maxn = 24;
    17 const int inf = 0x7fffffff;
    18 const double pi=acos(-1.0);
    19 const double eps = 1e-8;
    20 struct node{
    21     int num,d;
    22 }a[ maxn ];
    23 int mat[ maxn ][ maxn ];
    24 int cmp( node a,node b ){
    25     return a.d>b.d;
    26 }
    27 bool flag;
    28 
    29 int Judge( int n ){
    30     for( int i=0;i<n;i++ ){
    31         if( a[i].d<0 ){
    32             flag = false;
    33             return 0;
    34         }
    35     }
    36     for( int i=0;i<n;i++ ){
    37         if( a[i].d>0 ){
    38             return 1;
    39         }
    40     }
    41     flag = true;
    42     return 0;
    43 }
    44  
    45 int main(){
    46     int ca;
    47     scanf("%d",&ca);
    48     int cc = 0;
    49     while( ca-- ){
    50         int n;
    51         scanf("%d",&n);
    52         memset( mat,0,sizeof( mat ) );
    53         for( int i=0;i<n;i++ ){
    54             scanf("%d",&a[ i ].d);
    55             a[ i ].num = i;
    56         }
    57         if( cc!=0 ){
    58             printf("\n");
    59         }
    60         cc++; 
    61         flag = true;
    62         while( 1 ){
    63             if( Judge( n )==0 ) break;
    64             sort( a,a+n,cmp );
    65             for( int i=1;i<=a[0].d;i++ ){
    66                 a[ i ].d--;
    67                 mat[ a[0].num ][ a[ i ].num ] = mat[ a[ i ].num ][ a[ 0 ].num ] = 1;
    68             }
    69             a[ 0 ].d = 0;
    70         //    if( Judge( n )==0 ) break;
    71         }
    72         if( flag==false ) printf("NO\n");
    73         else {
    74             printf("YES\n");
    75             for( int i=0;i<n;i++ ){
    76                 for( int j=0;j<n;j++ ){
    77                     if( j==0 ) printf("%d",mat[i][j]);
    78                     else printf(" %d",mat[i][j]);
    79                 }
    80                 printf("\n");
    81             }
    82         }
    83     }
    84     return 0;
    85 }
    86         
    87     
    View Code
    keep moving...
  • 相关阅读:
    4.4 Iterator(迭代器)
    4.6 Memento(备忘录)
    4.1 Chain of Responsibility(职责链)
    4.5 Mediator(中介者)
    4.7 Observer(观察者)
    4.8 State(状态)
    4.11 Visitor(访问者)
    4.2 Command(命令)
    3.7 Proxy(代理)
    4.10 Template Method(模板方法)
  • 原文地址:https://www.cnblogs.com/xxx0624/p/3089599.html
Copyright © 2011-2022 走看看