3910 火車 LCA 並查集

2021-07-10 04:24:49 字數 718 閱讀 9384

在樹上走顯然是求lca,然後每次走完把端點到lca路徑上的點都用並查集合並,之後如果判斷兩點所屬集合相等說明已經走過。

《倍增被鏈剖虐成狗系列》

#include

#include

#define n 500005

#define ll long long

using namespace std;

int n,m,now,cnt;

ll ans;

int head[n],next[n<<1],list[n<<1],deep[n],f[n],fa[n][20];

inline int

read()

while (c>='0'&&c<='9')

return a*f;

}inline void insert(int

x,int

y)void dfs(intx)}

inline int lca(int

x,int

y)int find(int i)

int main()

dfs(1);

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

x=next;

while (find(x)!=h)

now=next;

}cout << ans << endl;

return

0;}

bzoj3910 火車 lca 並查集

a 國有n 個城市,城市之間有一些雙向道路相連,並且城市兩兩之間有唯一 路徑。現在有火車在城市 a,需要經過m 個城市。火車按照以下規則行駛 每次 行駛到還沒有經過的城市中在 m 個城市中最靠前的。現在小 a 想知道火車經過 這m 個城市後所經過的道路數量。第一行三個整數 n m a,表示城市數量 ...

BZOJ P3910 火車 LCA 並查集

我也不知道為什麼要寫這篇題解 明明十分休閒 糾結了好幾分鐘要不要敘述一下題意 給定一棵樹以及乙個序列,按照序列的順序行走 從loc i loc i loc i 走到l oc i 1 loc i 1 loc i 1 但是如果對於某乙個loc loclo c 已經走到過就不需要再走了,問最後的行走距離 ...

LCA法寶 並查集

由於我也是看懂的,突然發現這篇部落格特別的好!lca 最近公共祖先 我相信你現在肯定自己就可以打 了!另外注意,這裡的 f 陣列其實是用了並查集的思想 並查集詳解 倍增 inline void dfs int x,int s,int chang for reg int i 0 i g x size ...