HDU 1150 Machine Schedule (二分图最小点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150
有两个机器a和b,分别有n个模式和m个模式。下面有k个任务,每个任务需要a的一个模式或者b的一个模式完成。
两个机器初始都是0模式,一个机器转换一个模式需要重启一次。问你最少需要重启几次能完成所有的任务。
不太明显的二分匹配,将每个任务的两个模式连线,大概就能看出来这是个最小点覆盖问题。
/*
将下面任务的a状态和b状态连边,线的个数就是任务个数。
要使重启次数最少,那么就要使选择的点最少而且覆盖所有的边
所以问题转化为二分图求最小点覆盖数
*/
//二分图中 最小点覆盖 = 最大匹配数
#include <iostream>
#include <cstring>
#include <cstdio>
#include <vector>
using namespace std;
vector <int> G[];
int match[];
bool vis[]; bool dfs(int u) {
for(int i = ; i < G[u].size() ; ++i) {
int v = G[u][i];
if(!vis[v]) {
vis[v] = true;
if(match[v] == - || dfs(match[v])) {
match[v] = u;
return true;
}
}
}
return false;
} int hungry(int n) {
int res = ;
for(int i = ; i <= n - ; ++i) {
memset(vis , false , sizeof(vis));
if(dfs(i))
res++;
}
return res;
} int main()
{
int n , m , k , id , u , v;
while(~scanf("%d %d %d" , &n , &m , &k) && n) {
for(int i = ; i <= ; ++i) {
G[i].clear();
match[i] = -;
vis[i] = false;
}
for(int i = ; i < k ; ++i) {
scanf("%d %d %d" , &id , &u , &v);
G[u].push_back(v);
}
printf("%d\n" , hungry(n));
}
return ;
}
HDU 1150 Machine Schedule (二分图最小点覆盖)的更多相关文章
- UVA1194 Machine Schedule[二分图最小点覆盖]
题意翻译 有两台机器 A,B 分别有 n,m 种模式. 现在有 k 个任务.对于每个任务 i ,给定两个整数$ a_i\(和\) b_i$,表示如果该任务在 A上执行,需要设置模式为 \(a_i\): ...
- [poj1325] Machine Schedule (二分图最小点覆盖)
传送门 Description As we all know, machine scheduling is a very classical problem in computer science a ...
- POJ - 1325 Machine Schedule 二分图 最小点覆盖
题目大意:有两个机器,A机器有n种工作模式,B机器有m种工作模式,刚開始两个机器都是0模式.假设要切换模式的话,机器就必须的重新启动 有k个任务,每一个任务都能够交给A机器的i模式或者B机器的j模式完 ...
- hdu - 1150 Machine Schedule (二分图匹配最小点覆盖)
http://acm.hdu.edu.cn/showproblem.php?pid=1150 有两种机器,A机器有n种模式,B机器有m种模式,现在有k个任务需要执行,没切换一个任务机器就需要重启一次, ...
- (step6.3.3)hdu 1150(Machine Schedule——二分图的最小点覆盖数)
题目大意:第一行输入3个整数n,m,k.分别表示女生数(A机器数),男生数(B机器数),以及它们之间可能的组合(任务数). 在接下来的k行中,每行有3个整数c,a,b.表示任务c可以有机器A的a状态或 ...
- HDU - 1150 Machine Schedule(最小点覆盖数)
1.有两台机器A和B以及N个需要运行的任务.A机器有n种不同的模式,B机器有m种不同的模式,而每个任务都恰好在一台机器上运行.如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则 ...
- 匈牙利算法模板 hdu 1150 Machine Schedule(二分匹配)
二分图:https://blog.csdn.net/c20180630/article/details/70175814 https://blog.csdn.net/flynn_curry/artic ...
- hdu 1150 Machine Schedule(最小顶点覆盖)
pid=1150">Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/327 ...
- hdu 1150 Machine Schedule(二分匹配,简单匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1150 Machine Schedule Time Limit: 2000/1000 MS (Java/ ...
随机推荐
- JAVA操作数据库插入中文表中显示乱码的解决方法
String dbUrl = "jdbc:mysql://localhost:3306/BookDB?useUnicode=true&characterEncoding=GB2312 ...
- 函数buf_read_page_low
/********************************************************************//** Low-level function which r ...
- BZOJ2429: [HAOI2006]聪明的猴子
题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2429 题解:从某一点遍历n个点,且使最长边最短,就是MST了. 代码: #include< ...
- HTML空格符号   / &ensp / &emsp
半角的不断行的空白格(推荐使用) 半角的空格 全角的空格
- HDU 4635 Strongly connected (强连通分量)
题意 给定一个N个点M条边的简单图,求最多能加几条边,使得这个图仍然不是一个强连通图. 思路 2013多校第四场1004题.和官方题解思路一样,就直接贴了~ 最终添加完边的图,肯定可以分成两个部X和Y ...
- java读取照片信息 获取照片拍摄时的经纬度
项目结构 源码:ImageInfo.zip 第一步:添加需要的架包metadate-extractor.jar 架包下载地址:https://code.google.com/p/metadata-ex ...
- wait函数返回值总结
之前在学习wait和waitpid函数的时候,就对使用宏WIFEXITED来检查获取的进程终止状态产生过疑惑:一般我们在程序中是调用的exit或者_exit函数来退出的,那么wait和waitpid函 ...
- 【转】AVL
#include <iostream> #include <ctime> #include <queue> #include <cassert> #in ...
- POJ 3977 Subset
Subset Time Limit: 30000MS Memory Limit: 65536K Total Submissions: 3161 Accepted: 564 Descriptio ...
- Matlab编程实例(1) 移动平均
MATLAB数字信号处理作业,把自己写的程序发上来..欢迎交流~ QQ 五幺九七九零六四 首先是任意点移动平均: 主程序:mov_average_main.m (运行) 函数:mov_averag ...