hdu1150 Machine Schedule
来源:互联网 发布:java面向接口编程 编辑:程序博客网 时间:2024/05/16 01:05
有两台机器A和B以及N个需要运行的任务。每台机器有M种不同的模式,而每个任务都恰好在一台机器上运行。如果它在机器A上运行,则机器A需要设置为模式xi,如果它在机器B上运行,则机器A需要设置为模式yi。每台机器上的任务可以按照任意顺序执行,但是每台机器每转换一次模式需要重启一次。请合理为每个任务安排一台机器并合理安排顺序,使得机器重启次数尽量少。
二分图的最小顶点覆盖数=最大匹配数
本题就是求最小顶点覆盖数的。
每个任务建立一条边。
最小点覆盖就是求最少的点可以连接到所有的边。本题就是最小点覆盖=最大二分匹配数。
注意一点就是:题目说初始状态为0,所以如果一个任务有一点为0的边不要添加。因为不需要代价
#include<stdio.h>#include<string.h>#include<algorithm>#include<iostream>using namespace std;const int MAXN = 110;int uN,vN;int g[MAXN][MAXN];int linker[MAXN];bool used[MAXN];bool dfs(int u){ int v; for(v=0;v<vN;v++){ if(g[u][v]&&!used[v]){ used[v]=true; if(linker[v]==-1||dfs(linker[v])){ linker[v]=u; return true; } } } return false;}int hungary(){ int res=0; int u; memset(linker,-1,sizeof(linker)); for(u=0;u<uN;u++){ memset(used,0,sizeof(used)); if(dfs(u)) res++; } return res;}int main(){ int k; int i,u,v; while(scanf("%d",&uN),uN){ scanf("%d%d",&vN,&k); memset(g,0,sizeof(g)); while(k--){ scanf("%d%d%d",&i,&u,&v); if(u>0&&v>0) g[u][v]=1; } printf("%d\n",hungary()); } return 0;}
0 0
- hdu1150 Machine Schedule
- hdu1150 Machine Schedule
- HDU1150:Machine Schedule
- HDU1150-Machine Schedule
- hdu1150 Machine Schedule
- HDU1150 Machine Schedule
- hdu1150 Machine Schedule
- hdu1150——Machine Schedule
- hdu1150 Machine Schedule 最小点覆盖
- HDU1150 Machine Schedule(匈牙利算法)
- hdu1150 Machine Schedule(最小点覆盖)
- 二分匹配之HDU1150 Machine Schedule
- HDU1150 Machine Schedule(最小顶点覆盖)
- HDU1150:Machine Schedule(最小点覆盖)
- hdu1150 Machine Schedule 最小点覆盖
- HDU1150-- Machine Schedule( 二分图最小顶点覆盖)
- hdu1150 Machine Schedule (二分图的最小顶点覆盖)
- 【图算法之二分图】HDU1150---Machine Schedule
- Android-ProgressBar
- MVC在安卓应用,ANR,Force Close,Contentprovider实现数据共享
- 学习流程图后的想法
- 创建三角形类
- A - Dungeon Master(BFS)
- hdu1150 Machine Schedule
- 惨痛教训
- ACM-SG函数之Fibonacci again and again——hdu1848
- 学生信息
- Android uses-permission权限列表中文注释版
- 触发器
- 博客成立了o(∩_∩)o 哈哈
- Spring技术内幕——Spring Framework的IOC容器实现(二)
- leetcode 关于树的一些题目