傳送門啦
想讓最大值最小,所以,這題可以用二分法,排序之後發現可以並查集,因為要使最大值最小,排序後這個最大值是存在的。
對於會衝突的兩個罪犯,我們連一條無向邊,然後按權值從大到小排序,從大到小列舉每一條邊,如果邊上的兩個罪犯已經在乙個監獄,那麼輸出結果。
冤家路窄沒辦法咯
否則將兩個罪犯放到不同的監獄,我們考慮用並查集實現。
如果a和b不在乙個監獄,b和c不在乙個監獄,那麼a和c一定在乙個監獄(題目中說明只有兩個監獄)。
我們將並查集的大小擴大一倍,來建立罪犯的補集,即不在同乙個監獄的罪犯的集合.
#include #include #include #include using namespace std;
const int maxm = 100000,maxn = 20000;
int n,m;
struct edgee[maxm];
int f[maxn * 2];
bool cmp(edge x,edge y)
int find(int x)
int main()
int xx = find(e[i].a + n) , yy = find(e[i].b + n);
f[x] = yy;
f[y] = xx;
}printf("0\n");
return 0;
}
洛谷P1525 關押罪犯
題目描述 s 城現有兩座監獄,一共關押著n 名罪犯,編號分別為1 n。他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為c 的罪犯被關押在同...
洛谷 P1525 關押罪犯
拿到這題看都沒看直接寫了個裸地貪心 並查集 寫完就發現一點問題 include include include include include using namespace std int n,m,g 40010 struct pi pe 100010 bool cmp pi aa,pi bb i...
洛谷P1525 關押罪犯
ss 城現有兩座監獄,一共關押著 nn 名罪犯,編號分別為 1 n1 n 他們之間的關係自然也極不和諧。很多罪犯之間甚至積怨已久,如果客觀條件具備則隨時可能爆發衝突。我們用 怨氣值 乙個正整數值 來表示某兩名罪犯之間的仇恨程度,怨氣值越大,則這兩名罪犯之間的積怨越多。如果兩名怨氣值為 cc 的罪犯被...