luogu P1525 關押罪犯

2021-08-04 17:59:48 字數 2505 閱讀 9374

題目描述

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

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

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

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

輸入輸出格式

輸入格式:

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

輸出格式:

共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(由2 號和3 號罪犯引發)。其他任何分法都不會比這個分法更優。

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

總體來講這是乙個並查集的題,我們把模型抽象出來,就是一張無向圖,要求按照條件將圖中的點分成兩部分,使得兩個集合中的最大邊最小

仔細想想,這是一道基於並查集的題,而且一定會把大的邊割斷使這條邊不存在,只是乙個小貪心,但是普通的並查集思想又不是很好做,所以我們有了以下分析:

既然是貪心,我們會根據邊的大小來排序,由大到小排;

假設當前點線是a—b,則有以下幾種情況:

<1> a,b都分別還沒有在任何乙個監獄中,所以我們這時候把a,b分別放入兩個對立的監獄,至於對立的監獄的概念,我們為了方便**實現,就定義任意乙個監獄編號為x,則x^1為監獄x的對立監獄;

<2>a,b中有乙個人a已經在監獄中了,而另乙個人b沒有,則我們把b放入a所在監獄的對立監獄;

<3>a,b都在監獄中,但兩所監獄不是對立的,我們把a放在b目前的監獄的對立監獄,此時a的監獄編號已經改變,我們把原a所在的監獄的對立監獄的人放在現在b所在的監獄;

<4>a,b都在監獄中,且所在監獄相同,則這條邊就是答案;

放監獄這個步驟就是並查集,排序是貪心,所以這道題是貪心+並查集;

完整**:

#include

#include

#include

#define ii int

#define r register

#define i 123456

using

namespace

std;

struct node aa[i];

ii fa[i];

ii n,m,ans,_tot;

bool map(node a1,node a2)

ii find(r ii x)

int main()

//情況<4>;

if(x!=(y^1))

//情況<3>;}}

cout

<<0

0;}

by atm;

歡迎指錯^_^;

end;

luoguP1525關押罪犯

解決方案 1.按照衝突從大到小排序 2.優先保證最大衝突不發生 對,所以是貪心 3.開乙個並查集,維護必須在同乙個監獄中和必須不在同乙個監獄中的罪犯 4.等等,兩個並查集 5.所以要有2倍的人 6.x變成x和x n 7.x y n x和y必須不在一起 8.x y x和y必須在一起 9.開始處理 10...

Luogu P1525 關押罪犯

這又是一道坑題!思想進行了大幅轉變,並查集炸了之後終於搞出了一種奇葩的演算法,終於卡時間a了。把思路按順序理一理。先把邊從大到小排序一下。1 看完題目,我去這不是並查集模板麼嗎,馬上敲了個裸並查集,判斷兩個點如果之前已經聯通了,直接退出輸出當前值即可。code wa include include ...

P1525 關押罪犯

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