poj 1325 二分图最小顶点覆盖(机器重启)
2012-03-03 21:07
399 查看
题意:输入A、B机器的总状态和jobs的个数。机器要改变状态就要重启,求最小的重启次数使jobs全部工作。满足A状态或者B状态jobs可以工作
例如输入数据
0
0 1 1 代表 要执行0 就需要A是1或者 B是1 所以 前四个只要A都是1 那么 0~3 都可以工作...
所以抽象出二分图的最小顶点覆盖,A--B状态建图。求最小顶点覆盖
例如输入数据
5 5 10 0 1 1 1 1 2 2 1 3 3 1 4 4 2 1 5 2 2 6 2 3 7 2 4 8 3 3 9 4 3
0
0 1 1 代表 要执行0 就需要A是1或者 B是1 所以 前四个只要A都是1 那么 0~3 都可以工作...
所以抽象出二分图的最小顶点覆盖,A--B状态建图。求最小顶点覆盖
#include<iostream> using namespace std; int link[100]; bool vis[100],g[100][100]; int n,m; bool dfs(int u) { for(int i=1;i<=m;i++) { if(!vis[i]&&g[u][i]) { vis[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=u; return true; } } } return false; } int maxmatch() { int num=0; memset(link,-1,sizeof(link)); for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) num++; } return num; } int main() { int a,b,c; int k; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { if(n==0) break; memset(g,0,sizeof(g)); while(k--) { scanf("%d%d%d",&a,&b,&c); g[b][c]=1; } printf("%d\n",maxmatch()); } }
相关文章推荐
- POJ1325 Machine Schedule 【二分图最小顶点覆盖】
- poj1325_二分图最小顶点覆盖集
- poj 1325 Machine Schedule---二分图求最小顶点覆盖
- poj 1325 二分图最小点覆盖(机器模式的选择)
- POJ1325 Machine Schedule 【二分图最小顶点覆盖】
- poj1325 Machine Schedule【最小顶点覆盖】
- poj 3041 二分图最小顶点覆盖 小行星删行或列
- poj 1325 Machine Schedule(二分图的最小点覆盖)
- poj 3041 Asteroids( 最小顶点覆盖,二分图)
- POJ-1325-Machine Schedule-最小点覆盖(二分图-匈牙利算法)
- poj 1325 Machine Schedule 二分图最小点覆盖=最大匹配
- POJ 1325 && ZOJ 1364--Machine Schedule【二分图 && 最小点覆盖数】
- POJ 1325-Machine Schedule(二分图_最大匹配最小点覆盖)
- poj1325最小顶点覆盖
- POJ 1325 Machine schedine (二分图-最小点覆盖数=最大匹配边数)
- POJ 1325 Machine Schedule 二分图 最小点覆盖
- poj 2226-二分图的最小顶点覆盖
- POJ - 1325 Machine Schedule 二分图 最小点覆盖
- poj 1325 最小顶点覆盖
- poj 3041 Asteroids(二分图最小顶点覆盖)