Luogu P1525 關押罪犯

2022-04-03 00:08:58 字數 2113 閱讀 6361

這又是一道坑題!

思想進行了大幅轉變,並查集炸了之後終於搞出了一種奇葩的演算法,終於卡時間a了。

把思路按順序理一理。

先把邊從大到小排序一下。

<1> 看完題目,我去這不是並查集模板麼嗎,馬上敲了個裸並查集,判斷兩個點如果之前已經聯通了,直接退出輸出當前值即可。

code(wa)

#include#include

using

namespace

std;

const

int n=20005,m=100005

;struct

data

e[n];

intfather[n],i,n,m;

inline

void read(int &x)

inline

int comp(data a,data b)

inline

int getfather(int k)

intmain()

printf("%d

",e[i].s);

return0;

}

帥氣得搞了50分·。

然後就是一道帶權並查集的模板題了(可是我不會) 

不過可以用補集的做法來搞

開兩倍的陣列,每次連邊的時候把x和y+n相連,y和x+n相連。這樣如果兩個點的父節點相同那麼它們之間的距離肯定是偶數。

code(tle)

#include#include

using

namespace

std;

const

int n=20005,m=100005

;struct

data

e[n];

int father[n*2

],i,n,m;

inline

void read(int &x)

inline

int comp(data a,data b)

inline

int getfather(int k)

intmain()

father[fx]=getfather(e[i].r+n);

father[fy]=getfather(e[i].l+n);

}puts("0

");return0;

}

然後蜜汁tle了4個點

<3> 終於,發現了一種神奇的演算法。因為已經對邊長排過序,並且稍微想一想就可以得出如果到這一條邊不能滿足要求,那麼所有比它小的邊絕對也滿足不了。

於是——二分。

對於二分出來的邊長,只保留比它長的邊,再跑一遍染色即可。

所謂染色,就是把乙個點染上一種顏色(例如1),再把與它相鄰的點染上另一種顏色即可(例如2)。

如果發現乙個點與之相連的點顏色和它一樣,說明不可行,return 掉即可。

bfs實現玄學複雜度,常數小的應該能卡過去

code(ac)

#include#include

#include

#include

using

namespace

std;

const

int n=20005,m=100005

;vector

a[n],l[n];

int n,m,i,j,ans,col[n],q[n*2+10

],e[m],x,y;

inline

void read(int &x)

inline

int comp(int a,int b)

inline

bool check(int

x) else

if (col[k]==col[now]) return0;}}

}}

return1;

}int

main()

sort(e+1,e+m+1

,comp);

int l=1,r=m+1

;

while (l<=r)

printf("%d

",e[ans]);

return0;

}

luogu P1525 關押罪犯

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

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...

P1525 關押罪犯

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