
二分匹配
文章平均质量分 64
hzasrd
这个作者很懒,什么都没留下…
展开
-
hdu2119 Matrix
由题意可知,这其实就是让求最小覆盖点;在二分图中,选取最少的点数,使这些点和所有的边都有关联(把所有的边的覆盖),叫做最小点覆盖。可知 、最小点覆盖数 = 最大匹配数(证明略,自行百度);则按照求最大匹配数的模板来就可以了;#include#include#includeint n,m;int used[110],link[110],mat[110][110];int df原创 2016-07-25 13:41:03 · 313 阅读 · 0 评论 -
算法模板之二分匹配
二分匹配模板:int m,n;int used[N],link[N],mat[N][N];int dfs(int t){ int i; for(i=1; i<=n; i++) { if(used[i]==0&&mat[t][i]) { used[i]=1; if(link[i]==0|原创 2017-08-22 21:02:28 · 221 阅读 · 0 评论 -
lightoj 1011 Marriage Ceremonies (KM模板题)
You work in a company which organizes marriages. Marriages are not that easy to be made, so, the job is quite hard for you.The job gets more difficult when people come here and give their bio-data w原创 2017-08-22 20:59:05 · 280 阅读 · 0 评论 -
二分最优匹配,KM算法详解
二分图的最优匹配(KM算法)KM算法用来解决最大权匹配问题: 在一个二分图内,左顶点为X,右顶点为Y,现对于每组左右连接XiYj有权wij,求一种匹配使得所有wij的和最大。基本原理 该算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[ i ],顶点Yj的顶标为B[ j ],顶点Xi与Yj之间的边权为w[i,j]。在算法执行转载 2016-07-31 10:20:27 · 2905 阅读 · 0 评论 -
HDU 3395 Special Fish(KM)
这是一道KM模板题,函数部分都是一样的,只是建图不同。这里的建图是如果01矩阵中数字是1的话,那么第i条鱼攻击第j条鱼时,所产生的鱼卵数是第i条鱼和第j条鱼的异或值;#include#include#include#include#include#define N 110using namespace std;int link[N],mat[N][N],vx[N],vy[N],原创 2016-07-31 10:14:32 · 333 阅读 · 0 评论 -
Lightoj 1152 Hiding Gold
藏黄金。先计算出黄金的总共数量,并一一进行编号,从1开始,然后四个方向进行判断,看是否有和黄金相连的另一块黄金,有的话建立一条边,最终形成一个二分图,这个二分图的最大匹配再除2就是公用一块布条的黄金,用黄金总数减去他就是答案了= =#include#include #include #include#include#include#define N 1100using n原创 2016-07-28 21:50:23 · 310 阅读 · 0 评论 -
Lightoj 1198 (KM模板题)
套用KM模板就行了,一道模板题,注意建图就行。#include#include#include#include#include#define N 60using namespace std;int vx[N],vy[N],lx[N],ly[N],link[N],mat[N][N];int n;int dfs(int t){ int i; vx[t]=1;原创 2016-07-30 20:00:09 · 353 阅读 · 0 评论 -
hdu1083 COURSES(匈牙利水题)
一道匈牙利算法的水题,题目让求恰好满足:1,每个学生都要选一门课程;2,每个课程都有一个学生选择。很明显,求出二分图的最大匹配数,如果等于课程数目,就YES,不等就NO;#include#include#include#define N 310int n,p;int used[N],mat[N][N],link[N];int dfs(int t){ int i;原创 2016-07-25 20:34:23 · 250 阅读 · 0 评论 -
hdu1151(最小路径覆盖)
求二分匹配最小路劲覆盖问题,最小路径覆盖=节点数-最大匹配数;#include#include#include#define N 1100int n,m;int used[N],link[N],mat[N][N];int dfs(int t){ int i; for(i=1;i<=n;i++) { if(used[i]==0&&mat[t]原创 2016-07-25 17:57:35 · 344 阅读 · 0 评论 -
hdu1068Girls and Boys(求二分图的最大独立集)
这道题是让求最大独立集,最大独立集=节点数-最大匹配数;建好图后套用模板就行了;#include#include#include#define N 1100int n;int used[N],mat[N][N],link[N];int dfs(int t){ int i; for(i=0; i<n; i++) { if(used[i]==原创 2016-07-25 17:55:22 · 296 阅读 · 0 评论 -
hdu2063 过山车
这是一个二分匹配最最基础的题,完全套着模板来就可以,注意一下数组的初始化就可以了;#include#include#includeint m,n;int used[550],link[550],mat[550][550];int dfs(int t){ int i; for(i=1;i<=n;i++) { if(used[i]==0&&mat原创 2016-07-25 13:37:08 · 324 阅读 · 0 评论 -
算法模板之KM(带权的二分匹配)
KM模板(带权的二分匹配)int vx[N],vy[N],lx[N],ly[N],link[N],mat[N][N];int n;int dfs(int t){ int i; vx[t]=1; for(i=1; i<=n; i++) { if(vy[i]==0&&lx[t]+ly[i]==mat[t][i]) {原创 2017-08-22 21:05:36 · 296 阅读 · 0 评论