bzoj1787 緊急集合

2022-06-07 21:36:16 字數 841 閱讀 3809

對於三個點x、y和

z,設a=lca(x,y)

,b=lca(x,z)

,不妨假設a的深度比

b大,則b是

a的祖先(因為a是

x的祖先,b也是

x的祖先)。

首先將集合點定在a,考慮

a向每乙個方向調整,

a向父親調整會讓x和

y答案加一,

a向靠近

x(y同理

)的兒子調整,會讓y和

z答案加一,向其他兒子調整,會讓三者答案都加一,由此發現

a是最合適的點(這個過程似乎並不是很嚴謹,可以理解就行)。

1 #include2

using

namespace

std;

3#define n 500005

4struct

jiedge[n<<1];7

int e,n,m,x,y,z,head[n],in[n],out[n],s[n],f[n][21];8

bool pd(int x,int

y)11

int lca(int x,int

y)17

int len(int x,int

y)20

void add(int x,int

y)25

void dfs(int k,int fa,int

sh)34

intmain()

42 x=0

;43 dfs(1,1,0

);44

for(int i=1;i<=m;i++)

49 }

view code

bzoj 1787 Meet 緊急集合

給出bzoj鏈結。這個題還是求最近公共祖先的問題。而該題不同於別的題,它是需要求三個點的最近公共祖先。我們就需要求出三個點兩兩之間的lca。而這三個lca之間,必有兩個是相同的。如果兩個點相同,那另一點就是那三個點的lca。如果三個點都相同,那麼該點就是那三個點的lca。最後還需要統計走過的邊的長度...

排序 緊急集合

時間限制 1 sec 記憶體限制 64 mb 提交 32 解決 13 提交 狀態 討論版 命題人 題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾乎所有的獄警...

排序 緊急集合

題目描述 史上著名的大魔導師列別捷夫曾經說過 平靜的湖面,鍛鍊不出精悍的水手 安逸的生活打造不出時代的偉人。這句話用在監獄的獄警身上實在是再恰當不過,由於監獄一千年來從未出過任何差錯,因此幾乎所有的獄警都或多或少的有些懶散,我們可以將之量化為乙個數值即懶散值。所以當典獄長決定集合n個獄警以圍捕修羅王...