洛谷 P1525 關押罪犯

2021-08-07 15:13:45 字數 1064 閱讀 2911

拿到這題看都沒看直接寫了個裸地貪心+並查集

寫完就發現一點問題

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,g[40010];

struct pi

pe[100010];

bool

cmp(pi aa,pi bb)

intgetf

(int x)

intmain

()else

}   

printf("%d\n",0);

return0;}

因為當 當前2個罪犯 都不在2個並查集中的時候 究竟是 p1加到fa1 還是 p2加到fa1 就不知道

如果隨便加的話 可能後面的關係會對前面的關係產生影響 所以不能維護最優解

所以這個人品貪心也就過了3個點

最後想到正解

即建立並查集的補集 --> 將g陣列擴大2倍 n+1~end 為補集

分別將p1  p2和p2 p1的補集合並

這樣後面關係更新後前面的也會更新

所以這樣做是正確的

然後按這個思路debug了一下就a了

下面是ac**

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,g[40010];

struct pi

pe[100010];

bool

cmp(pi aa,pi bb)

intgetf

(int x)

intmain

()g[x]=getf(pe[i].p2+n); g[y]=getf(pe[i].p1+n);

}   

printf("%d\n",0);

return

0;}



洛谷P1525 關押罪犯

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

洛谷P1525 關押罪犯

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

關押罪犯 洛谷p1525

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