hdu1150 匈牙利
http://acm.split.hdu.edu.cn/showproblem.php?pid=1150
题目大意:有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器B需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。
这里有一个知识点:二分图的最小顶点覆盖数=最大匹配数。
判断是否为二分图:当且仅当G中无奇数长度的回路,一个无向图G=<V,E>是二分图
(用增广路经求二分图最大匹配。核心:寻找增广路):
主要思路就是不断寻找增广路经,增加匹配的个数。给定一个二分图G,在G的一个子图M中,M的边集中任意两条边都不依附于同一个顶点,则称M是一个匹配。如果一个匹配中,图中的每个顶点都和图中的某条边相关联,则称此匹配为完全匹配。
增广路经:若P是图G中一条连通两个未匹配顶点的路径,并且属M的边和不属于M的边在P上交替出现,则称P为相对于M的一条增广路径。
a. P的路径长度必定为奇数,第一条边和最后一条边都不属于M.
b. P经过取反操作可以得到一个更大的匹配M。.
c. 当且仅当不存在相对于M的增广路经,M为G的最大匹配。
#include<iostream>
#include<cstring>
using namespace std;
int map[][];
int v[],p[];
int n,m,k; int Find(int x)
{
for(int i=; i<m; i++)
{
if(map[x][i]== && !v[i])
{
v[i]=;
if(p[i]==- || Find(p[i]))
{
p[i]=x;
return ;
}
}
}
return ;
} int main()
{
while(cin>>n && n)
{
cin>>m>>k;
int a,b,c;
int ans=;
memset(map,,sizeof(map));
memset(p,-,sizeof(p));
for(int i=; i<=k; i++)
{
cin>>a>>b>>c;
if(b && c)
map[b][c]=;
}
for(int i=; i<n; i++)
{
memset(v,,sizeof(v));
ans+=Find(i);
}
cout<<ans<<endl;
}
return ;
}
hdu1150 匈牙利的更多相关文章
- hdu-1150(二分图+匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 思路:题目中给出两个机器A,B:给出k个任务,每个任务可以由A的x状态或者B的y状态来完成. 完 ...
- ACM/ICPC 之 机器调度-匈牙利算法解最小点覆盖集(DFS)(POJ1325)
//匈牙利算法-DFS //求最小点覆盖集 == 求最大匹配 //Time:0Ms Memory:208K #include<iostream> #include<cstring&g ...
- 洛谷1640 bzoj1854游戏 匈牙利就是又短又快
bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...
- 匈牙利算法——S.B.S.
匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最 ...
- 匈牙利算法与KM算法
匈牙利算法 var i,j,k,l,n,m,v,mm,ans:longint; a:..,..]of longint; p,f:..]of longint; function xyl(x,y:long ...
- C++之路进阶codevs1269(匈牙利游戏)
1269 匈牙利游戏 2012年CCC加拿大高中生信息学奥赛 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description ...
- HDU1054 Strategic Game——匈牙利算法
Strategic Game Bob enjoys playing computer games, especially strategic games, but sometimes he canno ...
- poj1274(匈牙利算法)
The Perfect Stall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22809 Accepted: 101 ...
- HDU1150 Machine Schedule
匈牙利算法 目前为止还是半懂不懂的状态 #include<iostream> #include<cstdio> #include<cstring> using na ...
随机推荐
- 【leetcode】Binary Tree Postorder Traversal (hard) ☆
二叉树的后序遍历 用标记右子树vector的方法 vector<int> postorderTraversal(TreeNode *root) { vector<int> an ...
- 在Win7下使用sphinx-build建立开源软件文档
最近想看看odoo的使用文档,在线看不方便,而且还没有提供离线文档下载,由于是开源项目,此项目托管在Github上,于是就有了想通过Github把文档git下来,可是git下来的文档是.rst文件,无 ...
- ios框架
iPhone OS(现在叫iOS)是iPhone, iPod touch 和 iPad 设备的操作系统. 1,Core OS: 是用FreeBSD和Mach所改写的Darwin, 是开源 ...
- ShareSdk使用心得
1. 微信和朋友圈:分享的时候设置了链接和图片,但就是不显示: 需要指明ShareType为WEB_PAGE 2. 需要完整添加 ShareSdk 的所需要的权限,不然分享闪退,并且不报异常:网络请求 ...
- 利用CocoaPods,在项目中导入AFNetworking类库
场景1:利用CocoaPods,在项目中导入AFNetworking类库 AFNetworking类库在GitHub地址是:https://github.com/AFNetworking/AFNetw ...
- JavaScript基础——实现循环
循环是多次执行同一段代码的一种手段.当你需要在一个数组或对象集上重复执行相同的任务时,这是非常有用的. JavaScript提供执行for和while循环的功能. 1.while循环 JavaScri ...
- sqlserver 用户、账号、安全等问题小汇
一.孤立账号 SQL Server 的用户安全管理分两层,整个SQL Server 服务器一层,每个数据库一层. 在服务器层的帐号,叫登录账户(SQL Server:服务器角色),可以设置它管理整个S ...
- JS添加MD5,JS提示框
http://pan.baidu.com/s/1kTmSp9t
- 【翻译二十】-java线程池
Thread Pools Most of the executor implementations in java.util.concurrent use thread pools, which co ...
- Solr入门之(2)快速启动:第一个例子
Solr作为一个web应用来启动,因此需要JDK支持,需要WEB容器,本文环境如下: JDK6.0或以上(环境变量设置等不再赘述) Tomcat-6.0.35或以上(自行下载) apache-solr ...