摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2874思路:近乎纯裸的LCA,只是题目给出的是森林,就要判断是否都在同一颗树上,这里我们只需判断两个子节点的根节点是否相同就可以了。http://paste.ubuntu.com/5957639/ 阅读全文
posted @ 2013-08-07 13:02 ihge2k 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2586思路:在求解最近公共祖先的问题上,用到的是Tarjan的思想,从根结点开始形成一棵深搜树,非常好的处理技巧就是在回溯到结点u的时候,u的子树已经遍历, 这时候才把u结点放入合并集合中,这样u结点和所有u的子树中的结点的最近公共祖先就是u了,u和还未遍历的所有u的兄弟结点及子树中的最近公共祖先就是 u的父亲结点。以此类推。这样我们在对树深度遍历的时候就很自然的将树中的结点分成若干的集合,两个集合中的所属不同集合的任意一对顶点的公共祖先都是 相同的,也就是说这两个集合的最近公共最先只有一个。对于每 阅读全文
posted @ 2013-08-07 10:14 ihge2k 阅读(1364) 评论(0) 推荐(0) 编辑
摘要: 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3394思路:题目的意思是要求无向图中的冲突边和不需要边的条数,如果一个块中有多个环,则该块中的每条边都是冲突边,而不能形成环路的边则为不需要边。于是我们可以求点双连通分量(块),统计一个块中点数与边数的关系,如果点数大于边数,则为不需要边,如果点数小于边数,则为冲突边。需要注意的地方:Tarjan求点双连通分量的时候,将块出栈时,只能出到u的子节点v为止,因为u作为割点极有可能是该块与别块公用的,这样若是每次都出栈到u,则会破坏其他块。http://paste.ubuntu.com/5957032/ 阅读全文
posted @ 2013-08-07 08:20 ihge2k 阅读(310) 评论(1) 推荐(0) 编辑