P1525 關押罪犯

2021-07-24 03:48:03 字數 2092 閱讀 4872

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

每年年末,警察局會將本年內監獄中的所有衝突事件按影響力從大到小排成乙個列表,然後上報到s 城z 市長那裡。公務繁忙的z 市長只會去看列表中的第乙個事件的影響力,如果影響很壞,他就會考慮撤換警察局長。

在詳細考察了n 名罪犯間的矛盾關係後,警察局長覺得壓力巨大。他準備將罪犯們在兩座監獄內重新分配,以求產生的衝突事件影響力都較小,從而保住自己的烏紗帽。假設只要處於同一監獄內的某兩個罪犯間有仇恨,那麼他們一定會在每年的某個時候發生摩擦。

那麼,應如何分配罪犯,才能使z 市長看到的那個衝突事件的影響力最小?這個最小值是多少?

輸入格式:

輸入檔案的每行中兩個數之間用乙個空格隔開。第一行為兩個正整數n 和m,分別表示罪犯的數目以及存在仇恨的罪犯對數。接下來的m 行每行為三個正整數aj,bj,cj,表示aj 號和bj 號罪犯之間存在仇恨,其怨氣值為cj。資料保證1

輸出格式:

共1 行,為z 市長看到的那個衝突事件的影響力。如果本年內監獄中未發生任何衝突事件,請輸出0。

輸入樣例#1:

4 6

1 4 2534

2 3 3512

1 2 28351

1 3 6618

2 4 1805

3 4 12884

輸出樣例#1:

3512
【輸入輸出樣例說明】罪犯之間的怨氣值如下面左圖所示,右圖所示為罪犯的分配方法,市長看到的衝突事件影響力是3512(由2 號和3 號罪犯引發)。其他任何分法都不會比這個分法更優。

【資料範圍】對於30%的資料有n≤ 15。對於70%的資料有n≤ 2000,m≤ 50000。對於100%的資料有n≤ 20000,m≤ 100000。

實際上是為了學習使用並查集的乙個小技巧--

整個模型可以抽象成一張二分圖,對於兩個監獄直接的邊,權值忽略,監獄內部的邊統計代價

目標是讓內部代價最大的那個最小

首先當然是盡量讓權值大的邊連線兩個集合。。

那麼我們只需要想辦法實時維護,並判斷當前的圖還是不是二分圖

用並查集。。

把邊按照權值從大到小排序,,對於當前處理的邊

若邊的兩個點x,y處於同一集合,,說明無法構造,輸出

否則連線(x,y+n)與(y,x+n),,其中點i+n代表i的對立點的集合

#include#include#includeusing namespace std;

const int maxn = 4e4 + 20;

const int maxm = 1e5 + 10;

struct e

e(int x,int y,int w): x(x),y(y),w(w){}

bool operator < (const e &b) const

}edgs[maxm];

int n,m,fa[maxn];

int getfa(int k)

int main()

sort(edgs + 1,edgs + m + 1);

for (int i = 1; i <= m; i++)

int t = getfa(edgs[i].y + n);

fa[fx] = t;

t = getfa(edgs[i].x + n);

fa[fy] = t;

} cout << 0;

return 0;

}

P1525 關押罪犯

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

P 1525 關押罪犯

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

P1525 關押罪犯

貪心 並查集維護 先進性排序,將怨氣值最大的一對拆開,分別找出每乙個人的 死敵 然後和自己的 死敵 分離開 用並查集維護就可以 最後只需要找出第乙個兩個人必須在乙個監獄的情況 也就是在同乙個並查集中 就是最後的答案。舉個例子 先貪心按照權值大小進行排序,在列舉到兩個人u,v u,vu,v時u v u...