P1525 關押罪犯

2021-09-28 07:24:46 字數 1257 閱讀 6770

貪心+並查集維護

先進性排序,將怨氣值最大的一對拆開,分別找出每乙個人的「死敵」,然後和自己的「死敵」分離開(用並查集維護就可以),最後只需要找出第乙個兩個人必須在乙個監獄的情況(也就是在同乙個並查集中),就是最後的答案。

舉個例子:

先貪心按照權值大小進行排序,在列舉到兩個人u,v

u,vu,

v時u ,v

u,vu,

v對應的死敵分別是u′,

v′

u',v'

u′,v

′。則u,v

′u,v'

u,v′

一定在乙個集合,u′,

vu',v

u′,v

一定在乙個集合。然後就找到一對u,v

u,vu,

v在同乙個集合就可以了

#include

#define rep(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)

#define ll long long

using

namespace std;

const

int maxn=

1e6+10;

const

int maxm=

2500+10

;int n,m;

int fa[maxn]

,vis[maxn]

;template

<

class

t>

inline

void

read

(t &x)

while

(isdigit

(ch)

) x*

=f;}

struct node

}e[maxn<<1]

;inline

intfind

(int x)

void

meger

(int x,

int y)

void

readdata()

sort

(e+1

,e+1

+m);

}bool

check

(int x,

int y)

void

work()

else

}printf

("0\n");

}int

main()

P1525 關押罪犯

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

P1525 關押罪犯

題目鏈結 在看了演算法高階指南的二分圖後,就對著方面的題躍躍欲試。這道題目,大佬已經把思路講的很清楚 有題目中明顯的提示 把罪犯分成兩個監獄,在同乙個監獄的罪犯之間的怨氣值要盡 可能小。那麼二分答案判定的東西就出來了。即在同乙個監獄裡的罪犯之間最大怨氣值 但是這個東西有什麼用處呢?1降低時間複雜度,...

P 1525 關押罪犯

1.題目鏈結。這和bzoj 1370是乙個東西 映象並查集。假設a n和a的敵人,把a n這個人叫做a的映象,同理b n是b的映象。然後對於給定的關係x,y連邊,邊權就是怒氣值,然後成了乙個無向帶權圖。1 先說第一種搞法,也是最直觀的。顯然題目的要求就是再說把這個圖刪掉一些邊使之成為二分圖,那麼答案...