以上の2019頭の牛オフサマースクールキャンプ(第九のフィールド)Eすべての男性は兄弟です

この質問は、ゲームが正しい解決策を考えるときであるが、それでも、実際には、タイムアウトの恐怖のために、やることはしなかったそのように簡単な互いに素セット+コンピューティングの組み合わせを後に。

 

ソリューション:

  1.まず、私たちが知ることができない人について説明し、考慮すべき転送の関係は、プールに分割されています。

  2.私たちは、組み合わせの数を計算する必要があるため、残りは、合併の集まりなので、また、記録された数のコレクションを見ることが必要です。

  3。の説明推定する必要がある ANSを- =(a * b *表プレ- N *( - A) - Nのb *( - B)+ * b)は、 コードで推奨見ると

   ANSの値aとbが組み込まれていないが、今とbがマージされた、そして我々は数aとbを減算する必要がある場合には、現在の値が組み合わせを寄付しました

   だから、aとbの組み合わせの数に貢献するには、次のとおりです。男から1を取り、その後、Bから1人を取り、その後、コレクションの残りの部分から2人を選びます

   コードは、a * b *表(二採取組み合わせの残りの組の数)であります

   彼は前のコードは、「二つの異なる人々が借り取る」と述べています

   :残りの二つの数は、収集が組み合わせで採取*(N - A) - - B×(N-- B)+ * Bをプレ 

   なぜあなたは(NA)はBに含まれているため、(NB)の中に含まれている、* bを追加したいんが、実際には、我々は再び追加する必要があり、二回* bを引きます。

 

  

#include <ビット/ STDC ++ H> 使用して名前空間STDを、
typedefを倍増DOU。
typedefの   長い長いLL。
typedefのペア < int型int型 > PII。
マップのtypedef < int型int型 > MII; #define PAI ACOS(-1.0)
 の#define M 100005で
 の#define INF 0x3f3f3f3f
 の#defineのmod十億七
 の#defineインラインINに
 の#define K << 1左
 の#define 1 |右のk << 1
 の#define左LSONのL、ミッドを、


  

#define rsonミッド+ 1、R、右
 の#define W(a)は(A)
 の#define lowbit(a)のA&( - A)
 の#define MS(B)のmemset(A、B、はsizeof(a)参照)
 #define ABS(A)(^(>> 31)) - (>> 31)
 の#define false_stdio IOS :: sync_with_stdio(偽)、cin.tie(0)、cout.tie(0)

LL N、メートル; 
ANS、予め、A、B、FA、FB LL。
LLボス[M]、NUM [M]。

INT見つける(int型K){
     場合(ボス[K] == k)は戻りK。
    { 
        ボス[K] = (ボス[K])を見つけます。
        戻りボス[K]。
    } 
} 

int型メイン(){ 
    false_stdio; 
    CIN >> N >> M、
    予め = N * - (N 1 /)2 ; // これは、nエミュレートされた2つの異なるヒト個体を取ることである 
    ANS = N / 2 *(N - 1)/ 3。 *(N - 2)/ 4 *(N - 3); // C(4)の初期最大値(N)

    のためのINT I = 1 ; I <= N; I ++は){
         / / 。始まる各セットは、唯一の数であるように1それら自身を認識していない 
        NUM [I] = 1 ; 
        BOSS [I] = I; 
    }
    INT I = 1 ; I <= M、Iが++ ){ 
        COUT << ANS << ENDL; 
        CIN >> A >> B; 
        FA =(A)、FBは、(B)を探す=探す; // ルートを探します
        IF(ANS || FB FAが== == 0続行 ; // コレクション、または答えが同じルートが、0まで低減することができない場合には、計算していない
 B = NUM [FA]をNUM = [FB]; // FBが設定数であるbのFAは、集合の数
         // 3つの参照に戻ることができる。この説明を以下の読み取り 
        ANSは、 - a * b *表(=プレ- * (N-- A) - B×(N-- B)+ *のB); 
        プレ - = A * B; //及びbの組み合わせの数減算

        ボス[FB] = FA; 
        NUM [FA] + = NUM [FB]; 
    } 
    COUT << ANS << ENDL;
     戻り 0 ; 
}

 

   

  

おすすめ

転載: www.cnblogs.com/caibingxu/p/11366348.html