貪心+並查集維護
先進性排序,將怨氣值最大的一對拆開,分別找出每乙個人的「死敵」,然後和自己的「死敵」分離開(用並查集維護就可以),最後只需要找出第乙個兩個人必須在乙個監獄的情況(也就是在同乙個並查集中),就是最後的答案。
舉個例子:
先貪心按照權值大小進行排序,在列舉到兩個人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 先說第一種搞法,也是最直觀的。顯然題目的要求就是再說把這個圖刪掉一些邊使之成為二分圖,那麼答案...