問題
g: 點的距離
時間限制
: 5 sec
記憶體限制
: 128 mb
提交: 57
解決: 19
[提交][狀態
][討論版
][命題人
:add_lm
][edit
] [testdata]
題目描述
給定一棵有
n個結點的樹,
q個詢問,每次詢問點x到點
y亮點之間的距離 輸入
第一行乙個
n,表示有
n個節。
接下來有
n-1行,每行
2個整數x,
y表示x,
y之間有一條連邊。
然後乙個整數
q,表示有
q次詢問,接下來
q行每行
2個整數x,
y表示詢問x到
y的距離。 輸出
輸出q行,每行表示每個詢問的結果
樣例輸入
6
1 21 3
2 42 5
3 62
2 65 6
樣例輸出
3
4
思路:裸的倍增求lca的題目
**:
#includeusing namespace std;
const int maxn = 4e5 + 5;
int dep[maxn];
int first[maxn], next[maxn * 2], v[maxn * 2], num_edge;
int fa[maxn];
int st[maxn][25];
void ins(int x, int y)//建邊
void dfs(int x, int fa)//無向圖中需要記錄父節點防止死迴圈
}int get_lca(int x, int y)
}//若此時兩者節點相同,說明y就是x和y的公共祖先
if (x == y)
//一起往上跳
for (int i = 20; i >= 0; i--)
}//公共祖先就是其父節點
return st[x][0];
}int main()
dfs(1, 0);
for (int i = 1; i <= n; i++)st[i][0] = fa[i];//建立st表
for (int i = 1; i <= 20; i++)
}int q;
scanf("%d", &q);
while (q--)
}}
G 編輯距離
author 夜楓 編輯距離,又稱levenshtein距離 也叫做edit distance 是指兩個字串之間,由乙個轉成另乙個所需的最少編輯操作次數。許可的編輯操作包括將乙個字元替換成另乙個字元,插入乙個字元,刪除乙個字元。例如將kitten一字轉成sitting sitten k s sitt...
lca 點的距離
給定一棵有n個結點的樹,q個詢問,每次詢問點x到點y亮點之間的距離 第一行乙個n,表示有n個節。接下來有n 1行,每行2個整數x,y表示x,y之間有一條連邊。然後乙個整數q,表示有q次詢問,接下來q行每行2個整數x,y表示詢問x到y的距離。輸出q行,每行表示每個詢問的結果 6 1 21 3 2 42...
平面最近點距離問題 分治法
演算法 0 把所有的點按照橫座標排序 1 用一條豎直的線l將所有的點分成兩等份 2 遞迴算出左半部分的最近兩點距離d1,右半部分的最近兩點距離d2,取d min d1,d2 3 算出 乙個在左半部分,另乙個在右半部分 這樣的點對的最短距離d3。4 結果 min d1,d2,d3 關鍵就是這第3步。貌...