oj題號:洛谷1525
思路:貪心。
先將所有的人按怨氣值從大到小排一下,然後依次嘗試將雙方分入兩個不同的監獄,如果失敗(即已分入相同的監獄),則輸出這個怨氣值。
1 #include2 #include3 #include4struct
edge 9};
10const
int n=20001;11
class
unionfindset
17public
:18 unionfindset(const
intn)
21bool isconnected(const
int x,const
inty)
24void union(const
int x,const
inty)
27};
28int
main()
35 std::sort(&e[0],&e[m],std::greater());
36unionfindset s(n);
37for(int i=0;i)
42 s.union(e[i].u,e[i].v+n);
43 s.union(e[i].v,e[i].u+n);44}
45 puts("0"
);46
return0;
47 }
NOIP2010 提高組 關押罪犯
s 城現有兩座監獄,一共關押著 n 名罪犯,編號分別為 1 n 他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為 c 的罪犯被關押在同一監...
NOIP2010提高組 關押罪犯 解題報告
解題思路 根據題目描述要將n名罪犯分在2座監獄中,可以考慮用二分圖來解答問題,將每名罪犯看為乙個點,存在仇恨的罪犯間連一條無向邊。要使發生衝突的影響力最小,這裡給出兩種解答方法,方法一 運用一點貪心的思想,讓衝突小的發生來使得衝突大的不發生,即將邊按權值由小到大進行排序,刪除當前權值最小的邊,判斷所...
NOIP2010提高組複賽C 關押罪犯
略這題是並查集的乙個變題,先按積怨值從大到小排序,然後乙個乙個看能否完全分開,遇到的第乙個不能分開的囚犯對 如果強行分開就必然有更高的積怨值出現 就是答案。一開始想到的是按監獄數量弄個並查集,後來發現並不行,因為如果要分開一對囚犯,沒辦法決定誰一定住1號監獄,誰一定住2號監獄。後來試了下用囚犯數量弄...