LCA Tarjan模板 HDU2586
2017-07-18 11:04
330 查看
#include <cstdio> #include <iostream> #include <algorithm> #include <vector> using namespace std; const int maxn = 40005; typedef long long ll; int Par[maxn], vis[maxn], dist[maxn]; vector<int> G[maxn]; vector<int> Dis[maxn]; vector<int> Gx[maxn]; vector<int> Gxnum[maxn]; int getPar (int x) { int r = x, i = x; while(r != Par[r]) r = Par[r]; while(i != r) { int tmp = Par[i]; Par[i] = r; i = tmp; } return r; } void merge (int t1, int t2) { int f1 = getPar(t1); int f2 = getPar(t2); if(f1 != f2) Par[f2] = f1; } struct node { int x, y, zx; } nod[205]; void dfs (int st) { for(int i=0; i<G[st].size(); ++i) { if(!vis[G[st][i]]) { vis[G[st][i]] = 1; dist[G[st][i]] = dist[st] + Dis[st][i]; dfs(G[st][i]); merge(st, G[st][i]); } } for(int i=0; i<Gx[st].size(); ++i) { if(vis[Gx[st][i]]) nod[Gxnum[st][i]].zx = getPar(Gx[st][i]); } } int main (void) { ios::sync_with_stdio(false); int T, n, m, a, b, c; cin>>T; while(T --) { for(int i=0; i<maxn; ++i) { Par[i] = i, vis[i] = dist[i] = 0; G[i].clear(), Dis[i].clear(); Gxnum[i].clear(), Gx[i].clear(); } cin>>n>>m; for(int i=1; i<n; ++i) { cin>>a>>b>>c; G[a].push_back(b); Dis[a].push_back(c); G[b].push_back(a); Dis[b].push_back(c); } for(int i=1; i<=m; ++i) { cin>>a>>b; Gx[a].push_back(b); Gx[b].push_back(a); nod[i].x = a, nod[i].y = b; Gxnum[a].push_back(i); Gxnum[b].push_back(i); } vis[1] = 1; dfs(1); for(int i=1; i<=m; ++i) { int ans = dist[nod[i].x]+dist[nod[i].y]-2*dist[nod[i].zx]; cout<<ans<<endl; } } return 0; }
相关文章推荐
- HDU2586 LCA_Tarjan模板题
- hdu2586(lca模板 / tarjan离线 + RMQ在线)
- HDOJ2586 lca查询 tarjan模板程序
- HDU2586 How far away ?【最近公共祖先】【Tarjan-LCA算法】
- LCA离线tarjan算法模板
- tarjan&&LCA模板
- LCA模板 Tarjan
- poj3694(lca + tarjan求桥模板)
- tarjan离线算法-LCA最近公共祖先算法模板(详细)
- HDU 2586 【LCA-Tarjan-模板】
- 【模板】tarjanLCA [2017年6月计划 学习tarjanLCA]
- hdu 2874 lca-tarjan离线算法(模板)
- LCA之tarjan模板
- hdu2586 How far away ? 【图论-Tarjan-Lca】
- POJ1330 Nearest Common Ancestors (tarjan离线求LCA模板)
- hdu2586 倍增lca模板
- Tarjan_LCA模板
- Tarjan--LCA算法的个人理解即模板
- hiho一下 第十五周 最近公共祖先·二 - 更新一下tarjan离线LCA模板
- LCA模板(tarjan+ST+倍增)