Least Common Ancestors 分类: ACM TYPE 2014-10-19 11:24 84人阅读 评论(0) 收藏
2014-10-19 11:24
447 查看
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <vector> using namespace std; struct node { int f, s; }; vector<node>imap[40005]; int deep[40005]; int dis[40005]; int fa[40005]; int ffa[40005]; bool vis[40005]; void dfs(int n,int s,int ff) { vis = true; for(int i=0;i<imap .size();i++) { if(vis[imap [i].f]) continue; deep[imap [i].f] = s; dis[imap [i].f] = dis +imap [i].s; fa[imap [i].f] = n; ffa[imap [i].f] = ff; dfs(imap [i].f,s+1,ff); } } int lca(int x, int y) { if(x==y) return dis[x]; if(deep[x]>=deep[y]) return lca(fa[x],y); else return lca(x,fa[y]); } int main() { int t, n, m, c; int u, v, s, ans; node cur; while(scanf("%d%d%d",&n,&m,&c)!=EOF) { memset(vis,false,sizeof(vis)); memset(fa,0,sizeof(fa)); memset(fa,false,sizeof(fa)); memset(dis,0,sizeof(dis)); memset(deep,false,sizeof(deep)); memset(imap,0,sizeof(imap)); for(int i=0;i<m;i++) { scanf("%d%d%d",&u,&v,&s); cur.f = v; cur.s = s; imap[u].push_back(cur); cur.f = u; imap[v].push_back(cur); } for(int i=1;i<=n;i++) { if(vis[i]) continue; ffa[i] = i; dfs(i,1,i); } for(int i=0;i<c;i++) { scanf("%d%d",&u,&v); if(ffa[u]!=ffa[v]) printf("Not connected\n"); else { ans = lca(u,v); printf("%d\n",dis[u]+dis[v]-2*ans); } } } return 0; }来自HDU2847
相关文章推荐
- OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏
- short-path problem (Dijkstra) 分类: ACM TYPE 2014-09-01 23:51 111人阅读 评论(0) 收藏
- Poj 2528 Mayor's posters 分类: Brush Mode 2014-07-23 09:12 84人阅读 评论(0) 收藏
- short-path problem (Floyd) 分类: ACM TYPE 2014-09-01 23:58 100人阅读 评论(0) 收藏
- cf 61E. Enemy is weak 树状数组求逆序数(WA) 分类: Brush Mode 2014-10-19 15:16 104人阅读 评论(0) 收藏
- android开发两种退出程序方式(killProcess,System.exit) 分类: Android Activity 2014-06-13 17:28 84人阅读 评论(0) 收藏
- short-path problem (Spfa) 分类: ACM TYPE 2014-09-02 00:30 103人阅读 评论(0) 收藏
- NYOJ-109 数列转换 AC 分类: NYOJ 2014-12-01 00:54 84人阅读 评论(0) 收藏
- 二分图匹配 分类: ACM TYPE 2014-10-01 19:57 94人阅读 评论(0) 收藏
- 【原创】有规律的文件数据处理函数 - printf和scanf、fscanf和fprintf、sscanf和sprintf 分类: Linux --- C 2014-11-11 18:33 84人阅读 评论(0) 收藏
- max_flow(Ford-Fulkerson) 分类: ACM TYPE 2014-09-02 01:50 110人阅读 评论(0) 收藏
- 二分图匹配(KM算法)n^3 分类: ACM TYPE 2014-10-01 21:46 98人阅读 评论(0) 收藏
- 【原创】《Linux高级程序设计》杨宗德著 - Linux Socket网络编程基础 - 网络调试工具 分类: Linux --- 应用程序设计 2014-12-05 17:19 84人阅读 评论(0) 收藏
- Segment Tree with Lazy 分类: ACM TYPE 2014-08-29 11:28 134人阅读 评论(0) 收藏
- hash值的计算与转换 分类: ACM TYPE 2015-05-07 17:49 36人阅读 评论(0) 收藏
- 深度学习基础(一)神经网络 分类: 深度学习 2015-01-19 21:29 84人阅读 评论(0) 收藏
- Segment Tree 分类: ACM TYPE 2014-08-29 13:04 97人阅读 评论(0) 收藏
- android 中listview 的用法 分类: Android界面和组件 2014-06-13 08:42 84人阅读 评论(0) 收藏
- Segment Tree 扫描线 分类: ACM TYPE 2014-08-29 13:08 89人阅读 评论(0) 收藏
- 二分图匹配(KM算法)n^4 分类: ACM TYPE 2014-10-04 11:36 88人阅读 评论(0) 收藏