文章分类 -  acm图论-最近公共祖先

hdu5215 求无向图中是否有奇环和偶环 :lca+dfs使图->树
摘要:队友给的思路,感觉思路很好啊==对图进行dfs扫描,假设u->v,遇到已经扫过的点v,计算当前点u和v的lca,lca和u以及v之间形成了一个环(计算奇偶)这样只能计算有没有简单的奇偶环,比如两个简单的奇环在一起就成了偶环(无论两个奇环共享几条边)所以在dfs中扫完子树之后,看有没有找到过两个奇环,... 阅读全文

posted @ 2015-05-03 16:39 xiao_xin 阅读(847) 评论(0) 推荐(0)

codeforces div294 E 求到树上两点距离相同点的数目
摘要:很显然的lca树上倍增问题1.两个点是相同点ans=n2.两个点深度相同ans=n-size 包含x子树-size 包含y子树3.两个点深度不同:则ans=深的那个向上走step/2步的size-向上走step/2-1的size然后用倍增写啦==额我的solve函数好丑 1 #include 2 #... 阅读全文

posted @ 2015-03-01 23:00 xiao_xin 阅读(184) 评论(0) 推荐(0)

hdu4822 求树上到某点比其他两点距离小的点个数
摘要:首先如果是两个点那应该从中间切成两半,再判断所属所以必然需要使用树上倍增==继而如果是三个点,则需要仔细分情况讨论==参考别人的分类讨论写的,感觉那个type判断在哪条链很巧妙啊~ 1 #pragma comment(linker,"/STACK:16777216") 2 #include 3... 阅读全文

posted @ 2015-02-07 04:50 xiao_xin 阅读(293) 评论(0) 推荐(0)

hdu2887 最小生成树+利用lca倍增求树上两点间最大线段
摘要:首先:可以利用加一个虚拟节点连向所有点,边权即为点权,求一遍最小生成树然后在这棵树上预处理一个倍增,在向上倍增的过程中开一个maxdis[x][j]记录从x开始向上2^j步最大线段这样就可以实现log的查询了== 1 #include 2 #include 3 #include 4 usin... 阅读全文

posted @ 2015-02-07 00:16 xiao_xin 阅读(347) 评论(0) 推荐(0)

hdu2586 lca模板(在线路径倍增)
摘要:这是基于二分搜索的,这个感觉更好写,利用任何整数可以由多个2^x次方数相加得到来进行向上路径倍增。代码和思路一样,相比较RMQ更为简单== 1 #pragma comment(linker,"/STACK:16777216") 2 #include 3 #include 4 #include 5 u... 阅读全文

posted @ 2015-02-06 21:13 xiao_xin 阅读(531) 评论(0) 推荐(0)

hdu2586 lca模板(在线RMQ)
摘要:杭电这题在线rmq用C++交会RE,G++才能过,但是手动开个栈C++就能AC了。。在线RMQ用的一种倍增思想,还是很常见的,必然要熟练运用数组具体功能代码里面都有:dis[N] 距离根节点距离id[N] 节点映射到dfs时间序上doit[X] 时间点对应的原节点depth[X] 该时间点深度RMQ... 阅读全文

posted @ 2015-02-06 20:14 xiao_xin 阅读(160) 评论(0) 推荐(0)

hdu2586 lca模板(tarjan离线算法)
摘要:1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 struct dian{ 7 int v,id; 8 }; 9 int now;10 vectormp[100005];11 int vis[10000... 阅读全文

posted @ 2014-09-30 21:26 xiao_xin 阅读(138) 评论(0) 推荐(0)

导航