HDU 图论专题
lulipeng_cpp
计算机迷
展开
-
HDU 2063过山车 二分图最大匹配 匈牙利算法
这题属于二分图算法的入门题目。 就是要求二分图的最大匹配。求解最大匹配的算法为匈牙利算法。其核心思想就是从左半点集逐个出发寻找增广路径,每找到 一条增广路径,匹配数就加一。可以证明当找不到增广路径是就得到了最大匹配。 详细解释请参阅:点击打开链接 其中,useif[]是在同一次寻找增广路径是有用。主要是由于递归。比如如果之前已用过右点集中的1,下一次就不能再用了。 开始时初始化nu原创 2012-06-03 15:06:43 · 1500 阅读 · 0 评论 -
HDU 1151 Air Aaid 最小路径覆盖
题目大意: 在一个城镇,有m个路口,和n条路,这些路都是单向的,而且路不会形成环,现在要弄一些伞兵去巡查这个城镇, 伞兵只能沿着路的方向走,问最少需要多少伞兵才能把所有的路口搜一遍。这个题目就转换成求解有向无环图的最 小路径覆盖问题了。 一个结论:有向无环图的最小路径覆盖=该图的顶点数-该图的最大匹配。 AC代码: #include using namespace std;原创 2012-06-04 12:33:41 · 2169 阅读 · 0 评论 -
HDU1232 畅通工程 并查集
这题是并查集的简单运用。我所利用的并查集没有经过优化。只用到了初始化(每个元素都是一个集合)、查找(某个 元素所在的集合,集合以根节点标志)、合并(两集合不属于同一集合则合并) 这题的主要思想在于:找出连通分量的个数。减一之后就是所求最小需要添加的路径数。而利用并查集时可以发现连通 分量的个数等于父节点为自身的节点数目。 AC代码: #include using namespac原创 2012-06-25 11:03:30 · 5507 阅读 · 0 评论 -
HDU 1068 Girls and Boys 二分图 最大独立集 字符串
独立集是指两两之间没有边的顶点集合。顶点数目最多的集合称为最大独立集。 二分图最大独立集 = 顶点数 - 二分图最大匹配。 所以这题在于解决二个问题: 1、求二分图的最大匹配。 由于左右两个集合是同一集合,不分男女。所以,理论上讲存在0到3,就一定存在3到0。刚开始的想法是只将0到3记起来, 3到0就不记录了。这样在求最大匹配是可以少点计算。可是却WA了!不解。我还是觉得这种思路原创 2012-06-26 09:38:11 · 1161 阅读 · 1 评论 -
HDU 1054 Strategic Game 二分图 最小顶点覆盖
做该题要掌握以下两点: 1、二分图最小顶点覆盖 = 双向二分图最大匹配 / 2 。 2、利用STL中的vector的可以很方便的建立图的邻接表存储。主要用到push_back()、clear()操作。 3、scanf()和printf()函数可以很方便的实现题中的输入和输出。详见代码。 AC代码:625MS #include #include using namespace s原创 2012-06-26 10:58:02 · 1553 阅读 · 0 评论 -
HDU 1272小希的迷宫 1325Is It A Tree? 并查集确定图为树
这两题主要是解决一个图是否是树的问题。 有很多细节需要注意。 1、空树也是树。 2、一个图若是树需满足两个条件: ①连通分量为一; ②图中无环,包括自环和非自环。 3、边数+1=顶点数。 以上几点只是针对无向图的,1272题就是解决无向图是否是树的问题。而如果要判断有向图是否是树,还要判断 顶点的入度。满足入度为0的点只有一个,以及入度都不大于1。1325题就是判断有向图是否是树的原创 2012-06-25 11:19:09 · 1196 阅读 · 0 评论 -
HDU 1856 More is better 并查集 路径压缩
做了并查集一段时间了。个人觉得利用并查集解题的套路其实很单调。 1、开一个数组记录各个节点的父节点,初始化 2、给出一对关联的数据,查找 3、根据查找结果如果根不属于同一集合则合并 当然,还可以优化。主要是在查找利用递归,使得在回溯时各个节点的父节点都是树的根节点。下次查找就可以 降低查找长度。其次,可以利用一个数组记录每棵树的高度。在合并时将矮树链接到高树上,使得新生成的树尽 量矮。原创 2012-06-27 10:39:18 · 1257 阅读 · 2 评论