給出 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...