疑難雜題 距離(LCA)

2021-10-23 06:04:19 字數 1494 閱讀 5080

給出 n 個點的一棵樹,多次詢問兩點之間的最短距離。

注意:邊是無向的。

所有節點的編號是 1,2,…,n。

輸入格式

第一行為兩個整數 n 和 m。n 表示點數,m 表示詢問次數;

下來 n−1 行,每行三個整數 x,y,k,表示點 x 和點 y 之間存在一條邊長度為 k;

再接下來 m 行,每行兩個整數 x,y,表示詢問點 x 到點 y 的最短距離。

樹中結點編號從 1 到 n。

輸出格式

共 m 行,對於每次詢問,輸出一行詢問結果。

資料範圍

2≤n≤104,

1≤m≤2×104,

0輸入樣例1:

2 21 2 100

1 22 1

輸出樣例1:

100100

輸入樣例2:

3 21 2 10

3 1 15

1 23 2

輸出樣例2:

核心操作:

詢問兩個點的最近公共祖先

vectorquery[n]; // first存查詢的另外乙個點,second存查詢編號

void add(int a, int b, int c)

void dfs(int u, int fa)

}int find(int x)

void tarjan(int u)

}for (auto item : query[u])

}st[u] = 2;

}int main()

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

);query[b].push_back();}}

for (int i = 1; i <= n; i ++ ) p[i] = i;

dfs(1, -1);

tarjan(1);

for (int i = 0; i < m; i ++ ) printf("%d\n", res[i]);

return 0;

}```

疑難雜題筆記 修改陣列

給定乙個長度為 n 的陣列 a a1,a2,an 陣列中有可能有重複出現的整數。現在小明要按以下方法將其修改為沒有重複整數的陣列。小明會依次修改 a2,a3,an。當修改 ai 時,小明會檢查 ai 是否在 a1 ai 1 現過。如果出現過,則小明會給 ai 加上 1 如果新的 ai 仍在之前出現過...

acwing演算法學習 疑難雜題 剪格仔

1.首先判斷有沒有兩 聯通塊 2.然後搜尋 這裡不是搜尋一筆畫畫完的那種 3.dfs 4.列舉每乙個dfs的點的四個方向,都放入s當中 5.再進行一次dfs 6.注意判重,搜過的就不再搜了 搜尋方式 生成雜湊 include define x first define y second using ...

Hadoop疑難雜症

前天安裝了pig,本來寫了條pig latin,但一直卡在 17 05 07 17 47 07 info mapreduce.job running job job 1494150363568 0001跑不通,想著肯定是mapredcue自身有問題,於是開始了艱苦的檢錯之旅,從csdn到stackf...