關押罪犯 NOIP2013

2021-08-03 16:19:44 字數 1605 閱讀 2561

description

s城現有兩座監獄,一共關押著n名罪犯,編號分別為1~n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用「怨 氣值」(乙個正整數值)來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為 c 的罪犯被關押在同一監獄,他們倆之間會發生摩擦,並造成影響力為c的衝突事件。

每年年末,警察局會將本年內監獄中的所有衝突事件按影響力從大到小排成乙個列表,然後上報到s城z市長那裡。公務繁忙的z市長只會去看列表中的第乙個事件的影響力, 如果影響很壞,他就會考慮撤換警察局長。

在詳細考察了n名罪犯間的矛盾關係後,警察局長覺得壓力巨大。他準備將罪犯們在兩座監獄內重新分配,以求產生的衝突事件影響力都較小,從而保住自己的烏紗帽。假設只要處於同一監獄內的某兩個罪犯間有仇恨,那麼他們一定會在每年的某個時候發生摩擦。那麼,應如何分配罪犯,才能使z市長看到的那個衝突事件的影響力最小?這個最小值是多少?

input

輸入檔名為 prison.in。輸入檔案的每行中兩個數之間用乙個空格隔開。

第一行為兩個正整數n和m,分別表示罪犯的數目以及存在仇恨的罪犯對數。

接下來的m行每行為三個正整數 aj,bj,cj,表示aj號和bj號罪犯之間存在仇恨,其怨氣值為cj。資料保證1≤aj

output

輸出檔案prison.out共1行,為z市長看到的那個衝突事件的影響力。如果本年內監獄 中未發生任何衝突事件,請輸出0。 

sample input

4 61 4 2534

2 3 3512

1 2 28351

1 3 6618

2 4 1805

3 4 12884

sample output

3512

hint

【樣例說明】  

罪犯之間的怨氣值如下面左圖所示,右圖所示為罪犯的分配方法,市長看到的衝突事件 影響力是3512(由2號和3號罪犯引發)。其他任何分法都不會比這個分法更優

f1:虛點並查集;

思想:並查集只能合併子集而不能分割子集;

故而用虛點來記錄(a與b的虛點在一起,那麼a與)

#include

const int maxn=100005;

using namespace std;

int n,m;

int father[50005],jl;

inline int read()

while(c>='0'&&c<='9')

return f*r;

} struct node

int u,v,w;

}p[maxn];

int getfather(int i)

int main()

for(int i=1;i<=2*n;i++)father[i]=i;

sort(p+1,p+m+1);

for(int i=1;i<=m;i++)

else

father[getfather(n+x)]=getfather(y);

father[getfather(n+y)]=getfather(x);

}printf("0\n");

return 0;

}

NOIP 關押罪犯

描述 description s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為...

noip2010 關押罪犯

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極 不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨 氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之 間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監...

NOIP2010關押罪犯

s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監獄,他...