随笔分类 - 二分图
摘要:继续复习二分图题意:比较裸的二分图,输入n,表示n个不同的课程,下面n行,每行首先是m,表示后面跟着m对信息,每对信息为(p,q),表示在星期p的第q节上这节课,(一周7天,一天12节课)。问你怎么匹配,可以让这个人一周上最多的课。建立二分图,X为时间,[0,83],Y为课程,[0,n-1],然后有向边Y--->X,进行匈牙利一次即可#include <cstdio>#include <cstring>#define N 410#define M 50500int n,tot;int match[N];int head[N];struct edge{ int u,
阅读全文
摘要:最小路径覆盖先把相同的数字去掉即去重,按整除或者被整除关系建立有向图,可知这个有向图一定是无环的(DAG),转化为最小路径覆盖模型#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX 1010bool vis[MAX];int mat[MAX];long long a[MAX];int first[MAX];struct edge{ int u,v,next;}e[MAX*MAX];int nume;void add(int u , int
阅读全文
摘要:最大流 OR 二分图匹配题意:输入n,有n个插座,下面n行是每个插座的类型(最后24个字母来表示一个插座,没有空格放心用scanf,但是有可能插座会相同,但是这个没有什么影响) 输入m,有m个电器,下面m行每行两个单词分别是电器的名字和插头类型(同样24个字母单词内没空格,两个单词空格隔开) 输入k,有k个转换器,下面k行每行两个单词,分别表示转换器的入口类型和插头类型每种转换器的个数是无限的,转换器本身可以与转换器相连要你求,让最多的电器能够插在插座上(可以用转换器辅助也可以直接插上去),输入不能插上去的电器的数量思路一:转化为最大流,重点还是如何建图,我是用邻接表建图的这样效率...
阅读全文
摘要:二分图判定+最大匹配(匈牙利算法)解答看 hrbeu 哈工程The Accomodation of Students
阅读全文
摘要:经典题目,HDU上也有,给定一个无向图,先判断是否为二分图,不是输出No,是的话,输出最大匹配,算是一个模板题1.一个图不存在奇环则是二分图2.二分图最大匹配用匈牙利算法#include <cstdio>#include <cstring>#define N 210int g[N][N]; //无向图领接表int mat[N],cov[N],vis[N],c[N];int n,m;void input(){ memset(g,0,sizeof(g)); for(int i=1; i<=m; i++) { int u,v; scanf("%d%d"
阅读全文
摘要:题意:就6种型号的衣服,然后给你n件衣服,n一定是6的倍数,也就是每种类型的衣服的件数是一样的,然后给m个人,每个人能穿两种型号的衣服,给你每个人穿衣的信息,然后判断是否每个人都能找到衣服穿很显然是二分图最大匹配,但是这里有个小问题,就是一种衣服有多件,可能被多个人穿,和二分图匹配有点不同,在最大匹配中每个点是只会出现一次的,这个问题要解决不难就是把相同的衣服拆成多件不同的衣服处理,但是建图的时候就要注意多处理一下,建图完毕后就是纯粹的匈牙利算法//问题一看就是二分图匹配,不过一个种衣服会有多件要怎么处理呢,就把多件相同类型的衣服当做不同衣服来处理//衣服按照1到6编号,如果第i种衣服有重复的
阅读全文