P1525 關押罪犯 並查集

2021-08-28 03:37:22 字數 598 閱讀 7380

評測記錄:

有n個罪犯,罪犯有些關係,就是(i

,j,c

) (i,

j,c)

表示罪犯i和罪犯j在同乙個監獄會造成c的破壞,有兩座監獄,要求分配的使得最大的破壞最小。

先按照c排序,然後就從大到小處理直到無法處理。

我們可以用並查集表示在乙個監獄中,然後用敵人的敵人是朋友來合併。記錄每個罪犯的敵人的根,然後每次合併就將他的敵人和他的敵人合併在一起,直到發現乙個人即是某人的敵人有是某人敵人的敵人就輸出。

#include

#include

#define n 20010

using

namespace

std;

struct nodea[n*5];

int n,m,father[n],empty[n];

bool cmp(node x,node y)

int find(int x)//尋找

void unionn(int x,int y)//合併

int main()

else

}printf("0");

}

並查集 P1525 關押罪犯

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

並查集 P1525 關押罪犯

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

並查集 P1525 關押罪犯

題意 有n個罪犯,給出m個三元組 a,b,w 表示罪犯a和b有仇恨關係,仇恨度為w,如果a和b關在同乙個監獄就會爆發衝突。將所有罪犯劃分到兩個監獄,使最大的衝突最小,求出這個最小值。題解 如果第a和b是敵人,那麼a和b的敵人就是 朋友,可以被劃分到同一集合。按邊權從大到小列舉,即優先把衝突大的分到兩...