HDU 1150 — Machine Schedule 最小顶点覆盖
2015-05-12 21:05
453 查看
原题:http://acm.hdu.edu.cn/showproblem.php?pid=1150
题意:
有两台机器,k个任务,每台机器有n种状态,从0到n-1,初始状态都为0;
接下来k行,(i,x,y)表示任务i 既可以在A机器的x状态下完成,也可以在B机器的y状态下完成;
问最少要转换几次状态;
思路:
最小顶点覆盖 = 最大匹配
将能完成同一任务的两个状态建立关系,求个最大匹配就好;
题意:
有两台机器,k个任务,每台机器有n种状态,从0到n-1,初始状态都为0;
接下来k行,(i,x,y)表示任务i 既可以在A机器的x状态下完成,也可以在B机器的y状态下完成;
问最少要转换几次状态;
思路:
最小顶点覆盖 = 最大匹配
将能完成同一任务的两个状态建立关系,求个最大匹配就好;
#include<stdio.h> #include<string.h> const int N = 110; int n, m, k; int line ; int match , used ; bool find(int x) { for(int i = 0;i<m;i++) { if(line[x][i] == true && !used[i]) { used[i] = 1; if(match[i] == -1 || find(match[i])) { match[i] = x; return true; } } } return false; } int main() { while(scanf("%d", &n)!=EOF) { if(n == 0) break; scanf("%d%d", &m, &k); memset(line, -1, sizeof(line)); memset(match, -1, sizeof(match)); while(k--) { int x, u, v; scanf("%d%d%d", &x, &u, &v); line[u][v] = true; } int sum = 0; for(int i = 1;i<n;i++) { memset(used, 0, sizeof(used)); if(find(i)) sum++; } printf("%d\n", sum); } return 0; }
相关文章推荐
- hdu 1150二分图最小顶点覆盖
- HDU 1150 二分图最小顶点覆盖 解题报告
- HDU 1150 Machine Schedule 最小顶点覆盖
- 【二分图匹配(最小顶点覆盖)】hdu 1150 Machine Schedule(外:hdu 1054 Strategic Game)
- HDU - 1150 最小顶点覆盖
- HDU-1150(求最小覆盖顶点数=二分最大匹配数)
- HDU 1150 Machine Schedule 最小顶点覆盖
- hdu 1150 Machine Schedule【最小顶点覆盖】
- hdu 1150 Machine Schedule(最小顶点覆盖)
- HDU 1150 Machine Schedule【最小顶点覆盖】
- hdu 1150 Machine Schedule(最小顶点覆盖)
- HDU1150-- Machine Schedule( 二分图最小顶点覆盖)
- hdu 1150 Machine Schedule(最小顶点覆盖)
- HDU 1150 Machine Schedule(最小顶点覆盖)
- HDU 1150 Machine Schedule(匈牙利算法 二分图的最小顶点覆盖 二分图最大匹配)
- hdu1150 Machine Schedule (二分图的最小顶点覆盖)
- hdu 1150 Machine Schedule 最小顶点覆盖(最大匹配)
- HDU 4160 Dolls (最小路径覆盖=顶点数-最大匹配数)
- HDU 1151 Air Raid(最小路径覆盖 = 顶点数 - 最大匹配数)
- HDU 1150 Machine Schedule (最小点覆盖)