hdu2586 LCA模板
来源:互联网 发布:jsp import java类 编辑:程序博客网 时间:2024/06/10 02:11
hdu2586
先预处理
然后是 在线询问 (也就是一边读入一边查询)
#pragma comment(linker, "/STACK:1024000000,1024000000")#include <cstdio>#include <iostream>#include <vector>using namespace std;#define maxn 400010int n;struct Node{ int v, w; Node(int v_, int w_){ v= v_, w= w_; }};vector<Node>g[maxn];int father[maxn];int dis[maxn];int dep[maxn];void dfs(int u, int fa, int deep){ father[u]= fa; dep[u]= deep; for(int i=0; i<g[u].size(); ++i){ int v= g[u][i].v; if(v==fa) continue; // dis[v]= dis[u] + g[u][i].w; dfs(v, u, deep+1); }}int p[maxn][30];void Init_LCA(){ for(int j=0; (1<<j)<=n; ++j) for(int i=1; i<=n; ++i) p[i][j]= -1; for(int i=1; i<=n; ++i) p[i][0]= father[i]; for(int j=1; (1<<j)<=n; ++j) for(int i=1; i<=n; ++i) if( p[i][j-1] != -1 ) p[i][j]= p[ p[i][j-1] ][ j-1 ];}int LCA(int x, int y){ if( dep[x] < dep[y] ) swap(x, y); int i,lg; for(lg=0; (1<<lg)<=dep[x]; ++lg); --lg; /// 使x往上走直到和y在同一水平线上; for(i=lg; i>=0; --i) if( dep[x] - (1<<i) >= dep[y] ) x= p[x][i]; if( x==y ) return x; /// 此时x,y在同一水平线上,使x,y同时以相同的速度(2^j)往上走; for(i=lg; i>=0; --i) if( p[x][i]!=-1 && p[x][i]!=p[y][i] ) x= p[x][i], y= p[y][i]; return father[x];}int main(){ int T, m; cin>>T; while(T--){ cin>>n>>m; for(int i=1; i<=n; ++i) g[i].clear(); for(int i=1; i<n; ++i){ int x, y, w; scanf("%d%d%d", &x,&y,&w); g[x].push_back( Node(y, w) ); g[y].push_back( Node(x, w) ); } dis[1]= 0; dfs(1, -1, 0); Init_LCA(); while(m--){ int x, y; scanf("%d%d", &x, &y); printf("%d\n", dis[x] + dis[y] - 2*dis[ LCA(x, y) ]); } }}
LCA离线算法(储存所有询问之后再查询)
http://blog.csdn.net/dellaserss/article/details/8250926
- hdu2586 LCA模板
- LCA Tarjan模板 HDU2586
- hdu2586 倍增lca模板
- LCA离线+在线+hdu2586(模板)
- HDU2586 How far away ?(LCA模板题)
- hdu2586 LCA
- hdu2586(LCA)
- hdu2586 lca
- LCA离线模板(Tarjan)倍增模板 hdu2586
- 【HDU2586】How far away?-LCA算法模板题
- HDU2586 离线tarjan LCA
- hdu2586 LCA 离线算法
- HDU2586【LCA在线算法】
- hdu2586 lca+rmq
- tarjan 离线 lca hdu2586
- hdu2586 How far away? LCA
- poj1330+hdu2586 LCA离线算法
- LCA在线算法(hdu2586)
- 第十五周项目2 洋灰三角
- JQuery获取checkbox选项
- [FMS]一步一步学Flash Media Server(四)
- 日常NSDate使用整理
- 二维数组
- hdu2586 LCA模板
- DotNetBar 快速访问工具栏的配置代码
- 【linux】程序的安装于运行
- 杨辉三角
- Servlet事件监听器(2)
- JVM加载class文件的原理机制
- 数据库查询效率
- JQuery 移除事件
- 非沪籍女生约辩异地高考沦为骂战 无疾而终