Codeforces Round 910 (Div. 2) Solution
目前进度:
A | B | C | D | E | F |
---|---|---|---|---|---|
solved contest | solved contest | solved contest | solved contest | not solved | not solved |
目前进度:
A | B | C | D | E | F |
---|---|---|---|---|---|
solved contest | solved contest | solved contest | solved contest | not solved | not solved |
理性思维:根据知识解决问题、做出决定或取得理解的思维形式。
非理性思维:凭感觉、情绪、习惯(经验)等做出决定或取得理解的思维形式。
感觉 VS 认为
\(2019.6.29\ update:\)给出了时间复杂度的证明,更新了\(L_AT^EX\)
先引入一个问题:
1 | 给定一颗有n个节点的树,给定根节点 |
看到这样的题目,大家首先想到的是暴力吧?
从\(x\)出发向上走到根,标记每个经过的节点。
从\(y\)出发向上走,经过的第一个有标记的节点就是"x到y路径上深度最小的节点"\((LCA)\)。
\(Code:\)
1 | int LCA(int x,int y) |
但是让我们算算复杂度... \(\Theta(N)\ \)TLE
为什么复杂度如此之高?明显是因为走得太慢了。
我们需要更好的算法。
怎么做呢?
睿智的先人想到了倍增树剖
先把树剖分成一条条的链
每次直接跳一整条链,不就快了吗?
于是,树链剖分(\(Tree-chain\ Partition\))诞生了。