hdu 2586 How far away ?(LCA:最近公共祖先)
来源:互联网 发布:西服面料 知乎 编辑:程序博客网 时间:2024/05/14 03:16
题目:
链接:点击打开链接
题意:
思路:
代码:
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int N = 40040;const int M = 220;struct node{ int from; int to; int next; int val;}edge[2*N];struct node1{ int from; int to; int next; int num;}edge1[2*M];int tol,head[N],head1[N],tol1;int father[N],dis[N],LCA[M];int n,m;int vis[N];void add(int u,int v,int w){ edge[tol].from = u; edge[tol].to = v; edge[tol].next = head[u]; edge[tol].val = w; head[u] = tol++;}void add1(int u,int v,int w){ edge1[tol1].from = u; edge1[tol1].to = v; edge1[tol1].next = head1[u]; edge1[tol1].num = w; head1[u] = tol1++;}int findset(int x){ return father[x] == x ? x : father[x] = findset(father[x]);}void Tarjan(int u){ int v; vis[u] = 1; father[u] = u; for(int j=head1[u]; j!=-1; j=edge1[j].next) { v = edge1[j].to; if(vis[v]) LCA[edge1[j].num] = findset(v); } for(int j=head[u]; j!=-1; j=edge[j].next) { v = edge[j].to; if(!vis[v]) { dis[v] = dis[u] + edge[j].val; Tarjan(v); father[v] = u; } }}void init(){ tol = 0; tol1 = 0; dis[1] = 0; memset(head,-1,sizeof(head)); memset(head1,-1,sizeof(head1)); memset(vis,0,sizeof(vis));}int main(){ //freopen("input.txt","r",stdin); int t; int a,b,c; cin>>t; while(t--) { init(); scanf("%d%d",&n,&m); for(int i=1; i<n; i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } for(int i=1; i<=m; i++) { scanf("%d%d",&a,&b); add1(a,b,i); add1(b,a,i); } Tarjan(1); for(int i=0; i<tol1; i+=2) { a = edge1[i].from; b = edge1[i].to; c = edge1[i].num; printf("%d\n",dis[a] + dis[b] - 2*dis[LCA[c]]); } } return 0;}
--------------------------------------------------------------------
战斗,从不退缩;奋斗,永不停歇~~~~~~~~~~~~~
0 0
- hdu 2586 How far away ?(LCA:最近公共祖先)
- hdu 2586 How far away ? LCA 最近公共祖先
- 【LCA最近公共祖先】HDU 2586 How far away ?
- HDU 2586 How far away ? 最近公共祖先LCA
- HDU 2586 How far away ? (LCA最近公共祖先)
- HDU 2586-How far away(最近公共祖先LCA)
- How far away ?+hdu+最近公共祖先
- hdu 2586How far away ? 最近公共祖先LCA离线算法
- HDU 2586 How far away ? (Lca最近公共祖先 在线算法)
- HDU 2586 How far away ?(LCA模板 最近公共祖先啊)
- 学习记录4:LCA (最近公共祖先)(hdu 2586 How far away?)
- hdu 2586 How far away ?【最近公共祖先】
- hdu 2586 How far away ?(最近公共祖先)
- [HDU 2586] How far away ? 最近公共祖先
- HDU 2586 How far away ? Tarjan 离线最近公共祖先
- HDU2586 How far away ?【最近公共祖先】【Tarjan-LCA算法】
- hdu 2586 How far away ? 最近公共祖先lca 在线算法(倍增法)/离线算法(Tarjan算法)
- HDU 2586 How far away ? (LCA模板题 Tarjan算法求最小公共祖先)
- fastjson常用方法
- 一个简单的HTTP测试工具:Send HTTP Tool
- UBUNTU SVN 服务器配置
- java interface接口和多继承
- (二)抽象类、接口
- hdu 2586 How far away ?(LCA:最近公共祖先)
- 二进制系统不能精确表示 0.9
- Java学习总结6——类加载1(类初始化顺序)
- Linux - wc统计文件行数、单词数或字节数
- TNS-12541: TNS: 无监听程序
- Struts2 中的Tiles框架的使用
- JAVA的extends用法
- POJ 1144 Network(简单求无向图割顶数)
- ant 自动化打包