博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hud1150二分图最小顶点覆盖
阅读量:6788 次
发布时间:2019-06-26

本文共 1196 字,大约阅读时间需要 3 分钟。

弱菜需要更加多的学习!!

英文题还是给出题意吧,英文太头疼了。。。

 

题意: A机器n种工作模式,B机器m种工作模式,共有k个任务。

(i,x,y)代表:任务i可由A机器x模式或者B机器y模式完成。

任务顺序可以随便改动,如果A或者B机器需要更换模式,则需要重启机器。

求完成工作,需要最少启动机器次数。

 

解题思路: 画出二分图,易知该问题为最小点覆盖问题,根据König定理最小顶点覆盖 = 最大匹配数  

给出大牛的证明:

最小点覆盖定义:假如选了一个点就相当于覆盖了以它为端点的所有边,你需要选择最少的点来覆盖所有的边。

算了,还是给链接吧- -。。。:

 

我的代码:

#include
#include
using namespace std;int map[111][111];int tmp[111];bool flag[111];int n,m;int DFS(int x){ for(int i=1;i<=m;i++) //机器B集合 { if(map[x][i]&&!flag[i]) //未被匹配 { flag[i]=true; if(tmp[i]==-1||DFS(tmp[i])) { tmp[i]=x; return 1; } } } return 0;}int main(){ int k,t,x,sum,y; while(cin>>n&&n!=0) { cin>>m>>k; memset(map,0,sizeof(map)); for(int i=0;i
>t; cin>>x>>y; map[x][y]=1; } //求最大匹配 memset(tmp,-1,sizeof(tmp)); sum=0; for(int i=1;i<=n;i++) //匹配a机器 { memset(flag,0,sizeof(flag)); sum+=DFS(i); } cout<
<

 

转载于:https://www.cnblogs.com/amourjun/archive/2013/04/12/5134188.html

你可能感兴趣的文章
spring 的自建request请求
查看>>
数组的相关知识
查看>>
Python中的logger和handler到底是个什么鬼
查看>>
mysql之 openark-kit online ddl
查看>>
mydumper安装、原理介绍
查看>>
值类型和引用类型的详细讨论
查看>>
《ArcGIS Runtime SDK for Android开发笔记》——(12)、自定义方式加载Bundle格式缓存数据...
查看>>
mysql 查询当天、本周,本月,上一个月的数据
查看>>
构建和管理有效API市场的关键步骤
查看>>
B00003 C++标准库 std::bitset
查看>>
字符串最小表示法(1) 朴素算法
查看>>
oracle监听问题
查看>>
windows 数据类型转换为 dotnet 数据类型
查看>>
fork函数
查看>>
ROS语音交互——科大讯飞语音合成TTS(二)
查看>>
为什么要架构?当架构走火入魔时怎么办
查看>>
请说明Java中字符'\'的含义,有什么作用?
查看>>
Jenkins部署Python项目实战
查看>>
.Net Core 2.0生态(3):ASP.NET Core 2.0 特性介绍和使用指南
查看>>
数论5——欧拉定理
查看>>