拿到這題看都沒看直接寫了個裸地貪心+並查集
寫完就發現一點問題
#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 的罪犯被關押在同一...