關押罪犯
並查集先對怒氣值排序
然後一對一對遍歷
如果二者父親相同
那就是無法避免的最大衝突
如果不同
則判斷二者是否已經有必定不能在乙個監獄的物件
若有則讓那個物件的父親變成對手的父親(因為對手必定和物件在同一監獄)
若沒有則讓這個物件變成對手(因為對手不能和他在乙個監獄)
我又在sort裡的m還是n翻跟頭了。。。
#include.h>
using namespace std;
int fa[
20005];
struct nodep[
100005];
intfind
(int x)
return fa[x]
=find
(fa[x]);
}bool check
(int x,
int y)
else
}void
merge
(int x,
int y)
bool cmp
(node x,node y)
int b[
100005];
intmain()
for(
int i=
1;i<=m;i++
)sort
(p+1
,p+m+
1,cmp)
;for
(int i=
1;i<=m+
1;i++
)else
elseif(
!b[p[i]
.y])
else}}
return0;
}
今天看到cerr的神仙操作。。。
還有一些set的操作
*s.
begin()
;//訪問最小元素
*--s.
end();
//訪問最大元素
*--s.
lower_bound
(x);
//x不能為最小元素 查詢<=x的最大元素
*s.lower_bound
(x);
//查詢》=x的最小元素
set的操作都是o(logn)的
優先佇列的操作
priority_queue這是小根堆
洛谷1525 關押罪犯
並查集第一道非模版題。s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪...
Solution洛谷1525關押罪犯
題面描述 s城現有兩座監獄,一共關押著n名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同一監...
洛谷P1525 關押罪犯
題目描述 s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同...