這道題值得一刷
題解裡的巨佬都用tarjan(~~窩太難了~~)
實際上是他們太巨了
本人(馬蜂)碼風獨特,請見諒
#include#include#include
#include
using
namespace
std;
inline
intread()
while(ch>='
0'&&ch<='9'
)
return x*f;
}inline
void
out(int
a)int a,b,c,d,e,shen[500005],par[20][500005
],q1,q2, max_log_n;
vector
q[500005
];void dfs(int v,int p,intd)}
void
cl()
}}int lca(int u,int
v) }
if(u==v)
return
u;
for(int k=max_log_n-1;k>=0;k--)
}return par[0
][u];
}int
main()
dfs(c,-1,0
); cl();
for(int i=1;i<=b;i++)
return0;
}
事實證明read(),write()(他不香嗎)真香,給誰誰不香
都看到這裡了,不點贊嗎!
LCA之倍增簡單講解
lca之倍增簡單講解 lca代指least common ancestor,翻譯過來就是最近公共祖先 如下圖,x和y的最近公共祖先就是二號節點 那麼,如何來求這個最近公共祖先呢?1.暴力演算法 讓x和y一步一步向上爬,一直爬到相遇為止 x 4 3 2 y 6 5 2 可是這樣暴力實在是太慢了,我們要...
講解 模板 最近公共祖先(LCA)(倍增)
閱讀須知 我認為讀者已經掌握 或了解 了 倍增思想 樹 圖 的基本概念及簡單實現 存圖與建圖 dfs 嗯,我們來看看最近公共祖先 lca 的一種實現方式 倍增。話說什麼是最近公共祖先呢?emmm 大家如果知道樹的話,應該就知道父親節點與兒子節點了吧,那麼祖先就是父親的父親的父親的 總之在同一條樹鏈上...
倍增LCA複習
時間過去了如此之久,我連倍增lca都不怎麼記得了,要粗事啊。首先預處理層數和每個節點的父親,然後預處理p陣列,p i,j 表示i向上第2 j個祖先。最後對於每個詢問x,y先把x,y變成同一層數的 x或y向上走直到兩個層數相等 然後x,y同時向上走,直到x和y的父親相同位置。自 1.dfs預處理出所有...