以上2019頭の牛オフサマースクールキャンプ(第6)E構造、同じ原組成補グラフ

https://ac.nowcoder.com/acm/contest/886#question

疑いが隣接行列G及びGマップの出力H中に存在する場合、その相補図組成物とGがHであるnグラフに点があるかどうかを尋ねられないことを意味。

質問の分析建設、答えは一意ではありません。図画像とエッジの数は、N = 4 * K + 2、および4 * K + 3ときいいえ溶液に、これを補完します

n = 4の場合*部分P1に4点にK、点P2、P3の全て、P4前の2つの群構成、さらに部分と部分との間の2つの2部縁部とP3P1、P4P2の間に接続された2つの側P1P2の2つの部分二十から二さえ側

図その相補体は、元と同形接続側P3P2の間に接続されたエッジ間のグループP3P4、P4P1、から構成されています。

ブロック、絵P1P2P3P4図P3P4P2P1補体または他の方式との間のマッピング。

n = 4の場合* K + 1とも十分にランダムな点の残りの二つのブロック。

コード

// B用 
の#include <ビット/ STDC ++ H> 使用して名前空間STDを、
typedefの長い長いLL。
const int型 MAXN = 2E3 + 10 INT G [MAXN] [MAXN]。
INT のmain()
{ int型、T、N、カセ= 1 
    cinを >> トン。
    一方、(t-- ){ 
        CIN >> N。
        memsetの(G、0はsizeof (G))。
        printf(" ケース#%dの:"、加瀬++ );
        もし
   
    (N%4 == 2 || N%4 == 3 ){ 
            COUT << " いいえ" << ENDL。
            続け; 
        } 
        { 
            COUT << " はい" << ENDL。
            INTのブロック= N / 4 以下のためにint型 i = 1 ; iは=ブロックを<I ++は{)
                 のためのint型 J =ブロック+ 1、J <= 2 *ブロック; jは++
                    G [I] [J] = G [j]は[I] = 1 INT J = 2 *ブロック+ 1、J <= 3 *ブロック; J ++ 
                    G [I] [J] = G [j]は[I] = 1 int型 J = I + 1 ; J <=ブロックJ ++ 
                    G [I] [J] = G [j]は[I] = 1 
            } 
            のためのint型 I =ブロック+ 1 ; I <= 2 *ブロック、iは++ ){
                 ためINT J =3 *ブロック+ 1、J <= 4 *ブロック; J ++ 
                    G [I] [J] = G [j]は[I] = 1 int型 J = I + 1、J <= 2 ; *ブロックJ ++ 
                    G [I] [J] = G [j]は[I] = 1 
            } 
            場合(N%4 == 1 ){
                 ためint型 iは= 1 ; I <= 2 *ブロック、iは++ 
                    Gを[I] [N] = G [n]は[I] = 1 以下のためにint型 i = 1 ; iが= <N; iは++ ){
                     ためのint型 J = 1 ; J <= N; J ++ 
                        のprintf(" %dの" 、G [I] [J])。
                    printf(" \ nを" ); 
                } 
                のためにint型 I = 2 *ブロック+ 1 ; I <= 4 *ブロック、iは++ 
                    のprintf(" %dの" 、I)。
                以下のためのint型 I = 2*ブロック; I> = 1 ; i-- 
                    のprintf(" %dの" 、I)。
                printf(" %d個の\ n " 、N)。
            } 
            {
                 ためint型 i = 1 ; iが<= N; iが++ ){
                     ためINT J = 1 ; J <= N; J ++ 
                        のprintf(" %dの" 、G [I] [J])。
                    printf(" \ nを" ); 
                } 
                のためにint型、I = 2 *ブロック+ 1 ; I <= 4 *ブロック、iは++ 
                    のprintf(" %dの" 、I)。
                以下のためにint型 iは= 2 *ブロックを、I> = 1 ; i-- 
                    のprintf(" %d個の%Cを"、I、I == 1' \ N ''  ' )。
            } 
        } 

    } 
}

 

おすすめ

転載: www.cnblogs.com/stranger-/p/11298938.html
おすすめ