三点间LCA
三點間LCA
?
1.直接上題——jzoj5883. 【NOIP2018模擬A組9.25】到不了
Dscription
wy 和 wjk 是好朋友。
今天他們在一起聊天,突然聊到了以前一起唱過的《到不了》。
“說到到不了,我給你講一個故事吧。”
“嗯?”
“從前,神和凡人相愛了,憤怒的神王把他們關進了一個迷宮里,迷宮是由許多棵有根樹組 成的。神王每次把兩個人扔進其中的某一棵有根樹里面,兩個相鄰節點的距離為 1,兩人的 每一步都只能從兒子走到父親,不能從父親走到兒子,他們約定,走到同一個節點相見,由 于在迷宮里面行走十分消耗體力,他們決定找出那個使得他們走的總路程最少的節點,他們 當然會算出那個節點了,可是神王有時候會把兩棵有根樹合并為一棵,這下就麻煩了。。?!?br /> “唔。。?!?br /> [已經了解樹,森林的相關概念的同學請跳過下面一段]
樹:由 n 個點,n-1 條邊組成的無向連通圖。
父親/兒子:把樹的邊距離定義為 1,root 是樹的根,對于一棵樹里面相鄰的兩個點 u,v,到 root 的距離近的那個點是父親,到 root 距離遠的那個點是兒子
森林:由若干棵樹組成的圖
[簡化版題目描述]
維護一個森林,支持連邊操作和查詢兩點 LCA 操作
Input
第一行一個整數 N,M,代表森林里的節點總數和有根樹的數目。
第二行 M 個整數,第 i 個整數 ri 代表第 i 棵有根樹的根是編號為 ri 的節點
接下來 N-M 行,每行兩個整數 u,v 表示 u 和 v 相鄰
接下來一行一個整數 Q,表示 Q 個事件發生了
接下來 Q 行,每行若干個整數,表示一個事件
如果第一個數 op=1,接下來兩個整數 u,v,代表神王把 u 號節點所在的樹和 v 號節點所在的樹 合并到一起(即 u 到 v 連了一條邊),新的根為原來 u 號節點所在的樹的根(如果 u,v 已經聯通, 忽略這個事件)。
如果第一個數 op=2,接下來兩個整數 u,v,代表一次詢問,當一個人在 u 號節點,一個人 在 v 號節點,詢問他們找到的那個節點的編號
Output
對于每一個詢問(op=2 的操作),輸出一行一個整數,代表節點編號,如果 u,v 不聯通,輸 出 orzorz。
Sample Input
【樣例 1】
2 2
1 2
2
1 1 2
2 1 2
【樣例 2】
2 2
1 2
2
1 2 1
2 1 2
Sample Output
【樣例 1】
1
【樣例 2】
2
Data Constraint
對于 30%的數據 1 ≤ N ≤ 1000 1 ≤ Q ≤ 1000
對于 100%的數據 1 ≤ N ≤ 100000 1 ≤ Q ≤ 100000
?
2.1Solution
顯然可以LCT吧,這里不再撰述。
?
2.2Solution
通過歸納證明我們發現:
這一問題其實就是在求三點間。
顯然三點間并不是依次后的結果。
?
- 結論:
- 證明:歸納證明易得(非要看證明請見這位學長的博客:詳細的歸納證明)。
所以此題就很容易地用并查集解決了。?
總結
- 上一篇: 余额宝的钱怎么转到微信
- 下一篇: 文艺到爆炸的神仙句子