漂亮的公園

2021-10-05 17:39:01 字數 1473 閱讀 1162

把兩種顏色的點,看成兩顆樹做合併,

所以答案就是合併之後的直徑。

所以我們需要維護直徑,然後直接就只和原樹的兩個點有關,直接預處理即可。

一般有兩種方法:先求深度最大的點,必然在直徑上,然後找另乙個。或者一直維護直徑的兩個端點。

注釋的地方是第一種方法。常數更小。

ac**:

#pragma gcc optimize("-ofast","-funroll-all-loops")

#include

//#define int long long

using namespace std;

const

int n=

1e5+10;

int n,q,c[n]

,f[n][20

],dep[n]

; unordered_map<

int,

int> mp;

vector<

int> g[n]

,v,vec[n]

;inline

intadd

(int a,

int b)

inline

intget

(int x)

void

dfs(

int x,

int fa)

inline

intlca

(int x,

int y)

inline

intdis

(int x,

int y)

signed

main()

// sort(vec[i].begin(),vec[i].end(),(int a,int b));

// for(int j=2;j// if(dis(vec[i][j],vec[i][0])>dis(vec[i][0],vec[i][1])) vec[i][1]=vec[i][j];

}for

(int i=

1,x,y,res;i<=q;i++

) x=

get(x)

,y=get

(y); res=0;

for(

int j=

0;j<

min(2,

(int

)vec[x]

.size()

);j++

)for

(int k=

0;k<

min(2,

(int

)vec[y]

.size()

);k++

) res=

max(res,

dis(vec[x]

[j],vec[y]

[k]));

printf

("%d\n"

,res);}

return0;

}

侏羅紀公園

既然一切都是 設計 出來的,在1裡面,明明是個人的錯誤 那個白痴胖子偷胚胎 卻被擴充套件成整個系統的錯誤 這部電影主要是宣揚這個主題。就像世貿大廈被 襲擊了,然後我們不怪罪 卻怪罪樓蓋得不結實,如果也拍一部電影宣揚這個主題,我們大家怕是都要笑導演弱智,奇怪的是好像沒有人笑史匹柏在這部片裡表現的弱智。...

小白逛公園

描述 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去哪些公園玩了。一開始,小白就根據公園的風景給每個公園打了分 小新為了省事,每次遛狗的時候都會事先規定乙個範圍,小白只可以選擇第a個和第b個公園之間 包括a...

小白逛公園

小白逛公園 time limit 20000ms memory limit 65536k case time limit 2000ms description 小新經常陪小白去公園玩,也就是所謂的遛狗啦 在小新家附近有一條 公園路 路的一邊從南到北依次排著n個公園,小白早就看花了眼,自己也不清楚該去...