摘要: //类型:二分匹配中的最大独立子集//公式:二分图最大独立集点数等于顶点总数减去最大匹配数(|M|);//技巧:此题不进行顶点的划分(将所有学生作为左集合中的顶点和右集合中的顶点),将所有顶点进行匹配,最后除以2即可 #include <stdio.h>#include <string.h>//#include <conio.h>#define arraysiz... 阅读全文
posted @ 2010-05-06 22:47 北海小龙 阅读(339) 评论(0) 推荐(0) 编辑
摘要: //类型:二分图的最大匹配:使用匈牙利算法实现 #include <stdio.h>#include <string.h>//#include <conio.h>#define arraysize1 301 //课程数 #define arraysize2 85 //时间(将时间统一化成节数) int map[arraysize1][arraysize2];in... 阅读全文
posted @ 2010-05-06 22:46 北海小龙 阅读(180) 评论(0) 推荐(0) 编辑
摘要: //类型:二分图的最大匹配(匈牙利算法实现) //建图:如果 gopher和hole最s时间内可达,则建立一条边,剩下的则是利用匈牙利算法求最大匹配 #include <stdio.h>#include <string.h>#include <math.h>//#include <conio.h>#define arraysize 101typede... 阅读全文
posted @ 2010-05-06 22:46 北海小龙 阅读(171) 评论(0) 推荐(0) 编辑
摘要: //题目大意:城市之间单向相连,无环!问最少用多少个伞兵能遍历这张图。//题目类型:典型的最小路径覆盖问题,根据定理:最小路径覆盖=顶点数-最大匹配数1.用匈牙利算法求二分匹配,利用最小路径覆盖=顶点总数-最大匹配2.把每个点拆点为出点和入点#include <iostream>//#include <conio.h>using namespace std;#define ... 阅读全文
posted @ 2010-05-06 22:45 北海小龙 阅读(534) 评论(0) 推荐(0) 编辑
摘要: //题目类型:二分图的最大匹配//基础的二分匹配题:使用匈牙利算法实现,可以作为模板 //注:使用scanf,prinf输入输出否则会超时 #include <stdio.h>#include <string.h>//#include <conio.h>#define arraysize 201int map[arraysize][arraysize];int ... 阅读全文
posted @ 2010-05-06 22:45 北海小龙 阅读(172) 评论(0) 推荐(0) 编辑
摘要: 题目大意:老师带学生出去旅游,但是担心学生会发生恋爱关系,所以带出去的学生至少要满足以下要求之中的一个:1.身高相差40cm以上2.同性3.喜欢的音乐风格不同4.喜欢的运动相同问最多可以带出去多少学生?解题思路:最大独立集=顶点数(包括X和Y)-最大匹配(利用匈牙利算法)最大独立集:最大的一个集合,其中的每两点之间都不存在边 将所有可能发生恋爱关系的男女配对,那么可以带出去的人数应该等于这个二分图... 阅读全文
posted @ 2010-05-06 22:44 北海小龙 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 类型:二分匹配 题目大意:一个矩形中,有N个城市,现在这n个城市都要覆盖无线,若放置一个基站,那么它至多可以覆盖相邻的两个城市。问至少放置多少个基站才能使得所有的城市都覆盖无线?解题思路:最大匹配数+城市总数-(最大匹配数*2) ,最大匹配数代表每个基站覆盖两个城市,其余的城市用一个基站覆盖其中最大匹配数的求解,对顶点数不分左右子集,将左右子集都等于所有定点,最后将得出的匹配除以二则得到真正的匹配... 阅读全文
posted @ 2010-05-06 22:44 北海小龙 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 类型:二分图中最小顶点覆盖问题 题目大意:两台机器A,B,A有n个模式,B有m个模式,现在有k个工作,其中每一个工作可以由A或B中的一个特定模式来完成,但是切换机器的模式要重新启动一次,问最少要重启多少次机器才能完成所有工作? 解题思路:A,B两台机器构成一个二分图,在之间按照给出的条件连边。这样想,每一个工作其实是由一条边来代表的,那么我们只要用最少的顶点来覆盖所有的边即可。这就是最小覆盖。根据... 阅读全文
posted @ 2010-05-06 22:44 北海小龙 阅读(343) 评论(0) 推荐(0) 编辑
摘要: 题目类型:基本的二分匹配-二分图的最大匹配 算法实现:匈牙利算法 注意事项:本题使用scanf、printf,不要使用cout、cin,否则会超时。 #include //#include using namespace std; #define parray 101 #define narray 301 int map[parray][narray]; int match[narra... 阅读全文
posted @ 2010-05-06 22:43 北海小龙 阅读(298) 评论(0) 推荐(0) 编辑
摘要: //题目类型:最小顶点覆盖问题//题目大意:有一个N*N的格子,里面有-和*。一次命令可以消除某一行或某一列所有的*。请用最少的命令次数,消除所有的*。 //解题思路:最小点覆盖:在二分图中,选择最少的点,使得每一边都至少有端点被覆盖。//Konig定理:最小点覆盖数=最大匹配数//于是,将格子转化成左边N个点,右边N个点的二分图。边XiYj表示i,j有*。这样,只要这条边被选择,所有这一行的*都... 阅读全文
posted @ 2010-05-06 22:43 北海小龙 阅读(162) 评论(0) 推荐(0) 编辑