【NOIP2010]投獄犯罪者(互いに素なセット)

タイトル説明

Sシティ2つの既存の刑務所は、総拘留Nの、犯罪者号た1-N 彼らの関係は自然に非常に耳障り。多くの犯罪者も長年の恨みの中で、紛争の客観的条件は、いつでも噴火ができれば。我々は2人の犯罪者の間の敵意の程度、大きい怒り値、2人の犯罪者の間でより多くの恨みを示すために、「不満値」(正の整数値)を使用します。2人の苦情値場合はCの 同じ刑務所に保持されている犯罪者、摩擦は、それらの2つの衝撃力との間で発生するC衝突します。

各年の終わり、すべての警察署は降順リストに配置された影響力によって刑務所で今年衝突すること、およびそこZ S市長に報告します。Z-忙しい市長の影響が唯一の効果が悪い場合、彼は警察の署長を置き換えるために考慮される、リスト内の最初のイベントが表示されます。

詳細な研究ではN  犯罪者との間に矛盾した関係の後、警察署長は、巨大な圧力を感じました。彼は小さくて生成された紛争に影響を及ぼし、ひいては彼らの公式ポジションを維持するために、2つの刑務所内の犯罪者の再分配する準備ができていました。限り、同じ刑務所に2人の犯罪者で憎しみがあるとして、その後、彼らは今年のある時点での摩擦になると仮定します。

だから、どのように見てZ市長の競合の影響を最小限に抑えるために犯罪者を割り当てるには?この最小値はどのくらいですか?

 

 

 

サンプル入力と出力

入力#1
4 6 
1 4 2534 
2 3512 
1 2 28351 
1 3 6618 
2 4 1805 
3 12884 4
出力#1
3512

説明/ヒント

例説明[O]以下に示すように右犯罪割当方法に示すように、左犯人の怒りとの間の値は、市長の競合の影響を見ることである35122数及び3つの  イニシエータ番号犯罪者は)。その他のポイントシステムでは、このポイントシステムよりも良くなりません。

[データ範囲]

以下のために30%のデータの持ちN≤15を

以下のための70%のデータを持っているN≤2000、M≤50000を

以下のために100%のデータの持ちN≤20000、M≤100000を


1反演習の典型的な例が、本当に価値があると言われて 、慎重に検討をプレイ

 

#include <ビット/ STDC ++ H>
 使用して 名前空間STDを、
typedefの長い 長いLL。
const  int型 INF = 1E9 + 7 
インラインint型リード()
{ 
    チャー C = GETCHAR()。
    INT X = 0、F = 1 一方、(C < ' 0 ' || C> ' 9 ' ){
         もし、(C == ' - ')、F = - 1 
        C = GETCHAR()。
    }
    一方、(C> = ' 0 ' && C <= ' 9 ')x =(x << 3)+(X << 1)+(C ^ 48)、C = GETCHAR()。
    リターンのx *のF; 
} 
CONST  INT MAXN = 20009 const  int型 MAXM = 200019 ;
構造体のエッジ
{ 
    int型NEXに、W。
} P [MAXM]。
整数N、M、FA [MAXN]敵[MAXN]。
int型の検索(int型K)
{ 
    場合(FA [K] == k)はリターンK;
     戻り FA [k]を= (FA [K])を見つけます。
} 
BOOL CMP(エッジX、エッジY)
{ 戻り XW> YW;}
 int型のmain()
{ 
    N =(読み取り)、M = (読み取り)
    以下のためにint型 I = 1 ; I <= M; iが++ 
        pが.nex [I] = read()は、
        P [i]は.TOは。= )(読み取り、
        P [I] .W = read()は、
    以下のためにint型 i = 1 ; iが<= N; iは++ 
        FA [I] = I。
    ソート(P+ 1、P + 1 + M、CMP)
     するためのINT I = 1 I <= M; I ++は
        { 
            int型の T1 =(Pは、[I]は.nex)、T2 =検索(検索Pを[I] .TO) ;
             IF(T1 == T2){ 
                のprintf(" %のD " 、P [I] .W);
                 戻り 0 ; 
               } 
            IF(エネミー[P [I] .nex] == 0// 反対刑務所もしI私のピットが空だった 
             敵[P-[i]を.nex] = p型[i]の.TO; //は全体に置くために、この厄介なものを置く
            他の FA [検索(エネミー[P-[i]を.nex])] =検索(P-、[i]の.TOは);
               // 私は一緒に入れている人嫌いなもの入れ
            IF(敵[P-を[i]を.TO] == 0// まあ、これはお互いプットを持っている必要があり、互恵を(敵が 
                敵[P [I] .TO] = P [I] .nex;
             他の FA [(敵[P [I] .TO])検索] = (P [i]は.nex)検索;       
        } 
    COUT << " 0 " ;   // 幸せを祝う
    リターン 0 ; 
}

 

おすすめ

転載: www.cnblogs.com/phemiku/p/11440097.html