2019 7 17 洛谷 1525 關押罪犯

2021-09-25 08:41:42 字數 1225 閱讀 2692

關押罪犯

並查集先對怒氣值排序

然後一對一對遍歷

如果二者父親相同

那就是無法避免的最大衝突

如果不同

則判斷二者是否已經有必定不能在乙個監獄的物件

若有則讓那個物件的父親變成對手的父親(因為對手必定和物件在同一監獄)

若沒有則讓這個物件變成對手(因為對手不能和他在乙個監獄)

我又在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 的罪犯被關押在同...