二分图多重匹配

 

在二分图的最大匹配中,每个点(不管是X集合还是Y集合)最多只能与一条匹配边相关联,

然而,经常有这种问题,即二分图的一个点可以和多条匹配边相关联,但有上限,即cap[i]表示点i最多能和cap[i]条匹配边相关联。

 

hdu 3605

题意:2012来了,n个人可以逃往m个星球中的k个,每个星球都有上限,问所有的人能不能都都逃亡成功;

 

 

 1 #include <stdio.h>
 2 #include <string.h>
 3 const int N = 100000 + 10;
 4 const int M = 10 + 10;
 5 int n,m;
 6 int Map[N][M];
 7 int cap[M];//星球i的容量上限
 8 int cy[M][N];
 9 int num[M];//num[i]记录星球i已经匹配了n个人
10 bool vis[M];
11 
12 
13 bool dfs(int u)
14 {
15     for(int i=0; i<m; ++i)
16     {
17         if(!vis[i] && Map[u][i])
18         {
19             vis[i] = true;
20             if(num[i] < cap[i])
21             {
22                 cy[i][num[i]++] = u;
23                 return true;
24             }
25             else
26             {
27                 for(int j=0; j<cap[i]; ++j)//寻找增广路,可以从u出发,经过n条匹配边中的一条找到增广路就行
28                 {
29                     if(dfs(cy[i][j]))
30                     {
31                         cy[i][j] = u;
32                         return true;
33                     }
34                 }
35             }
36         }
37     }
38     return false;
39 }
40 bool MulMatch()
41 {
42     memset(num, 0, sizeof(num));
43     for(int i=0; i<n; ++i)
44     {
45         memset(vis, 0, sizeof(vis));
46         if(!dfs(i))
47             return false;
48     }
49     return true;
50 }
51 int main()
52 {    
53     int i,j;
54     while(scanf("%d%d",&n,&m)!=EOF)
55     {
56         for(i=0; i<n; ++i)
57             for(j=0; j<m; ++j)
58                 scanf("%d",&Map[i][j]);
59         
60         for(i=0; i<m; ++i)
61             scanf("%d",&cap[i]);
62         printf("%s\n",MulMatch()?"YES":"NO");
63     }
64     
65     return 0;
66 }

 hdu 1669

题意:给定n个人,m个组,没个人适合m个组中的k个,由给定的数据说明,
要求分组后,人最多的那个组是所有可能情况中最小的

组的人数的情况可能是0--->n  ,但是一个一个枚举太耗时了,所以用二分枚举最大组的容量上限,剩下的代码就都和上面那题一样

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <vector>
 4 using namespace std;
 5 const int nMax = 1000 + 10;
 6 const int mMax = 555 + 10;
 7 int num[mMax];
 8 bool vis[mMax];
 9 int cy[mMax][nMax];
10 vector<int> G[nMax];
11 int n,m,limit;
12 
13 void init()
14 {
15     for(int i=0; i<n; ++i)
16         G[i].clear();
17 }
18 bool dfs(int u)
19 {
20     for(int i=0; i<G[u].size(); ++i)
21     {
22         int v = G[u][i];
23         if(!vis[v])
24         {
25             vis[v] = true;
26             if(num[v] < limit)
27             {
28                 cy[v][num[v]++] = u;
29                 return true;
30             }
31             for(int j=0; j<limit; ++j)
32                 if(dfs(cy[v][j]))
33                 {
34                     cy[v][j] = u;
35                     return true;
36                 }
37             
38         }
39     }
40     return false;
41 }
42 bool MulMatch()
43 {
44     memset(num, 0, sizeof(num));
45     memset(cy, 0, sizeof(cy));
46     for(int i=0; i<n; ++i)
47     {
48         memset(vis, 0, sizeof(vis));
49         if(!dfs(i))
50             return false;
51     }
52     return true;
53 }
54 int main()
55 {
56     char str[20];
57     int i,j;
58     while(true)
59     {
60         scanf("%d%d",&n,&m);
61         if(n==0 && m==0)
62             break;
63         init();
64         for(i=0; i<n; ++i)
65         {
66             scanf("%s",str);
67             while( getchar()==' ')
68             {
69                 scanf("%d",&j);
70                 G[i].push_back(j);
71             }
72         }
73         int low = 0, high = n,ans = 0;
74         while(low <= high)
75         {
76             limit = (low + high) >> 1;//二分枚举最大组的容量上限为limit
77             if(MulMatch())
78             {
79                 ans = limit;
80                 high = limit - 1;
81             }
82             else
83                 low = limit + 1;
84         }
85         printf("%d\n",ans);
86     }
87     return 0;
88 }

 

转载于:https://www.cnblogs.com/justPassBy/p/4025031.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420547.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springmvc,spring,hibernate5.0整合

目录1. pom依赖2. web.xml3. spring核心配置文件3.1 jdbc配置信息3.2 sping 配置文件4. 实体映射5. 项目结构5.1 curd5.2 页面6. 测试1. spring版本 5.1.5 RELEASE 2. hibernate版本 5.3.9.Final 3. 数据源使用c3p0项目使用eclipse2017 maven构建, 完成学生的新增&#xff0c;…

MYSQL 查看表上索引的 1 方法

前期准备&#xff1a; create table T9(A int ,B text,C text,fulltext index fix_test_for_T8_B(B));#在定义表的时候加索引 create unique index ix_test_for_T8_A on T9(A);#加朴素索引 create fulltext index fix_test_for_T8_C on T9(C);#加全文索引 --------------------…

springmvc 结合ajax批量新增

目录1. 需要注意的问题2. 页面代码3. controller定义参数接收1. 需要注意的问题 mvc框架的处理日期问题ResponseBody响应对象是自定义对象&#xff0c;响应不是jsonResopnseBody响应自定义对象时&#xff0c;日期为是long类型的数结束数据方法的参数&#xff0c;该如何定义&am…

吐槽一下Activiti的用户手册和一本书

业余没事的时候&#xff0c;看了点Java的资料&#xff0c;无意之中发现了Activiti&#xff0c;就打算自己跑几个例子看看到底是怎么回事。一直搞底层&#xff0c;也得偶尔关心下上层到底发展到什么程度了不是。悲惨的过程就是这么开始的&#xff0c;首先是Activiti的用户手册&a…

手写简单的启动器

starter1. target2. 手写启动器~2.1 自动装配&#xff0c;自定义属性2.2 启动器&#xff0c;引用自动装配模块3. 在自己的项目引用上面的starter1. target 1. 启动器只用来做依赖导入(导入配置模块)2. 专门来写一个自动配置模块3. 启动器依赖自动配置&#xff1b;别人只需要引入…

Android 颜色渲染(九) PorterDuff及Xfermode详解

Android 颜色渲染(九) PorterDuff及Xfermode详解之前已经讲过了除ComposeShader之外Shader的全部子类, 在讲ComposeShader(组合渲染)之前, 由于构造ComposeShader需要 PorterDuffXfermode或者PorterDuff.Mode作为参数,所以在此先详细地了解下这两个类的作用,这对之后的绘图会…

拦截器(二)

只拦截controller的请求, 基于aop&#xff0c;横切。 Spring MVC的拦截器类似于Servlet开发中的过滤器Filter&#xff0c; 用于对处理器进行预处理和后处理。 将拦截器按一定的顺序联结成一条链&#xff0c; 这条链称为拦截器链&#xff08;InterceptorChain&#xff09;。 在访…

nodejsmongoangularjs

http://www.ibm.com/developerworks/cn/web/wa-nodejs-polling-app/转载于:https://www.cnblogs.com/xixifusigao/p/4037928.html

每次新建Android项目都报样式找不到的错误?

问题描述如图再网上找了下说改为<style name"AppBaseTheme" parent"android:Theme.Light">这样就行了的确改为这样就ok了但是如果每次都要这么改&#xff0c;不是很烦&#xff1f;有没有彻底解决这个问题的方法&#xff1f;谢谢 解决方案1新建的时候…

spring mvc全局异常处理,注解实现

ssm框架中的异常处理&#xff0c;可以是dao, service, controller 一直抛出异常&#xff0c;抛出就完事了。最终由全局异常类捕获&#xff0c;进行日志记录&#xff0c;页面跳转。… 核心注解 // 方法级别 ExceptionHandler // 全局异常类上 ControllerAdvice // ControllerA…

Qt多线程学习:创建多线程

【为什么要用多线程&#xff1f;】 传统的图形用户界面应用程序都仅仅有一个运行线程&#xff0c;而且一次仅仅运行一个操作。假设用户从用户界面中调用一个比較耗时的操作&#xff0c;当该操作正在运行时&#xff0c;用户界面一般会冻结而不再响应。这个问题能够用事件处理和多…

sql server使用杂记

SqlServer导出数据库 navcat for sql server中打开连接&#xff0c;打开数据库&#xff0c;右键--数据传输&#xff0c;常规选项卡--模式选择dbo&#xff0c;目标选择连接&#xff08;选择你新建的库&#xff09;或者文件&#xff08;导出你要的sql文件位置&#xff09;&#x…

图解springmvc 执行流程

核心对象 DispatcherServlet 核心控制器负责请求&#xff0c;响应&#xff0c;数据的分发。HandlerMapping 处理器映射器&#xff0c;负责到controller中&#xff0c;找到对应的方法&#xff0c;返回给核心控制器。HandleAdapter 处理适配器&#xff0c;将handle找到的方法执行…

VMware下Windows Server 2012添加新磁盘

系统管理员在VM下新装了一台Windows Server 2012服务器&#xff0c;我在上面安装了SQL Server 2014 Standard版数据库&#xff0c;安装之初&#xff0c;只分配了一个C盘&#xff0c;我想在这台服务器上添加了三个磁盘&#xff08;虚拟磁盘&#xff09;&#xff0c;步骤如下截图…

mybatis Caused by: java.io.IOException: Could not find resource xxx.xml

翻译&#xff1a;找不到mybatis的映射配置文件。。。 配置文件名别写错了… <!-- 扫描mapper --> <mappers><!-- src/main/resources下 使用\ --><!-- <mapper resource"cn\bitqian\mapper\ordersMapper.xml"/> --><!-- src/mai…

mybatis新增返回主键值

mapper <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace"cn.bitqian.dao.OrdersMa…