NOIP 關押罪犯(並查集)

2021-08-17 11:56:16 字數 2196 閱讀 4739

時間限制: 1 sec  

記憶體限制: 128 mb

提交: 94  

解決: 32 [

提交][

狀態][

討論版][命題人:

admin]

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

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

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

輸入每行中兩個數之間用乙個空格隔開。

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

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

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

4 6
1 4 2534
2 3 3512
1 2 28351
1 3 6618
2 4 1805
3 4 12884

3512

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

題解:首先可按照衝突值從大到小排序來進行處理,先解決衝突值最大的糾紛,將兩個罪犯放到不同的監獄,將放在同乙個監獄的罪犯並到同一顆樹上,同時用乙個陣列儲存罪犯的敵人,再次遇到敵人時候可將這兩個敵人並到一棵樹上,若當前兩個罪犯已經在同一顆樹上,則該衝突值就是最大衝突值。

#include#include #include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long

#define inf 0x3f3f3f3f

#define fast_io ios::sync_with_stdio(false)

const double pi = acos(-1.0);

const double eps = 1e-6;

using namespace std;

struct node

p[100005];

int tree[20005],e[20005];

int cmp(node a,node b)

inline ll read()

int find(int x)

void unite(int x,int y)

int main()

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

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

if(!e[p[i].a] && !e[p[i].b])

e[p[i].a]=p[i].b,e[p[i].b]=p[i].a;

else if(e[p[i].a] && !e[p[i].b])

unite(e[p[i].a],p[i].b),e[p[i].b]=p[i].a;

else if(!e[p[i].a] && e[p[i].b])

unite(e[p[i].b],p[i].a),e[p[i].a]=p[i].b;

else if(e[p[i].a] && e[p[i].b])

unite(e[p[i].a],p[i].b),unite(e[p[i].b],p[i].a);

}cout<<0<

return 0;

}

並查集 關押罪犯

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

NOIP2010 關押罪犯(並查集)

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

NOIP2010 關押罪犯 虛點並查集

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