評測記錄:
有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的敵人就是 朋友,可以被劃分到同一集合。按邊權從大到小列舉,即優先把衝突大的分到兩...