题意:给你一个有向图,求最大路覆盖数,但是点可以重复;解题思路:这题跟hdu 1054的不同之处是可以走重复的点,那么我们就可以这样想,假如这个点会被走重,那么我们就加一条边去跨过这个点,那么当这个点的相邻点集中,任意两个不相邻的点也能在匈牙利算法中得到匹配,最后在这个改造后的图中求最大路径覆盖数,就果断ac了891msG++代码#include<iostream>#incl
题意:一个农夫想为一个有低洼地区的草地铺木板,木板的长度不定,宽度为1格,铺下的木板不能盖到任何一处草地,问至少需要多少木板。解题思路:这题想了很久,一直想不出来,可能最近的是失恋导致的效率问题。这题的构图十分精妙,就例子来说,给出的草地是*.*..******...*.假设只 横 着放木板的话,我们把木板编个号1.2..333444...5
第一次做KM算法的题目,也许没能好好理解匈牙利算法,对这个KM算法几乎看不懂,上网搜了一下模板,这题几乎是抄的,看来要好好理解。题意:给你一个地图,里面有人和有屋(测试数据可以看成是人数等于屋数),一个人只能想上下左右移动,求所有人移动的次数最少的情况下,所有人都能进入屋子,当然可以路过屋子而不进去。解题思路:这题明显就是求最小权匹配的,只要把步数变为负数,就是求最大权匹配嘛,直接KM算法,模板过
赤裸裸的二分匹配。。。注意处理好输入#include<cstdlib>#include<iostream>#include<cstring>using namespace std;int mj[28][28];int flag[28];int result[28];int n;bool Fin
二分匹配模板题,找最小路径覆盖集(有最小路径覆盖集=顶点数-最大匹配集),第一次运用二分匹配解题,不过用了好长的时间吖,主要是指针的错误很难发现~!借用一个link的指针来建邻接表,结果没注意到这个指针每次要重开一个空间,晕死啦.....0ms代码#include<iostream>#include<cstdio>#include<cstdlib>#includ
求最小点覆盖集,最小点覆盖集=最大匹配集,继续匈牙利算法解决这里注意,输入的是根树一开始想先把根树转回二部图,发现比较麻烦最后直接把根树看成无向图来解决,即把边看成无向边,建立邻接表时一直两个顶点都插入,最后求得的匹配数除二就ok了不过时间用了太多了,有空再想优化吧543+ms代码#include<iostream>  
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号