poj3189 Steady Cow Assignment(枚举+多重匹配)
来源:互联网 发布:java的环境变量配置 编辑:程序博客网 时间:2024/05/29 06:30
有n头牛和b个棚,每个棚有容量上限。每头牛对每个棚有个喜欢程度,现在给牛分配住棚且棚中牛的数目不能超过该棚的上限。
先输入n,b。然后n行,每行有b个数字x[j],表示该头牛对棚子x[j]的喜欢程度是j。
现在求一种分配方法使得任意两头牛对所在棚的满意程度的差值最小,输出最小差值。
方法:枚举棚子满意度的上下限[low, high],然后做多重二分图匹配。
const int maxn = 1010;const int maxm = 21;int n, b;int like[maxn][maxm];int linker[maxm][maxn];int top[maxm];int num[maxm];bool mark[maxm];int low, high;bool dfs(int u) { for (int v = 1;v <= b;++v) { if (!mark[v] && low <= like[u][v] && like[u][v] <= high) { mark[v] = true; if (top[v] < num[v]) { linker[v][top[v]++] = u; return true; } for (int i = 0;i < top[v];++i) { if (dfs(linker[v][i])) { linker[v][i] = u; return true; } } } } return false;}bool hungary() { memset(top, 0,sizeof top); for (int i = 1;i <= n;++i) { memset(mark, false,sizeof mark); if (!dfs(i)) return false; } return true;}void solve() { low = high = 1; int ans = b; while(low <= high && high <= b) { if (hungary()) { ans = min(ans, high - low + 1); low++; // bug; }else high++; } cout << ans << endl;}int main(int argc, const char * argv[]){ // freopen("in.txt","r",stdin); // freopen("out.txt","w",stdout); // clock_t _ = clock(); while(~scanf("%d%d", &n, &b)) { int u, v; for (int i = 1;i <= n;++i) { for (int j = 1;j <= b;++j) { scanf("%d", &v); like[i][v] = j; } } for (int i = 1;i <= b;++i) scanf("%d", &num[i]); solve(); } // printf("\nTime cost: %.2fs\n", 1.0 * (clock() - _) / CLOCKS_PER_SEC); return 0;}
0 0
- poj3189 Steady Cow Assignment(枚举+多重匹配)
- poj3189 Steady Cow Assignment --- 多重匹配,二分图匹配解法
- poj3189--Steady Cow Assignment (二分多重匹配)
- POJ3189-Steady Cow Assignment
- POJ3189 Steady Cow Assignment
- POJ3189 Steady Cow Assignment
- POJ3189 Steady Cow Assignment 二分枚举+dinic最大流
- POJ 3189 Steady Cow Assignment(二分+多重匹配)
- 解题报告 之 POJ3189 Steady Cow Assignment
- POJ 3189 Steady Cow Assignment (枚举+二分图的多重匹配)
- POJ 3189--Steady Cow Assignment【二分图多重匹配 && 最大流求解 && 枚举 && 经典】
- POJ 3189 Steady Cow Assignment(二分+多重匹配)
- poj 3189 Steady Cow Assignment 二分图多重匹配
- poj 3189 Steady Cow Assignment 二分图多重匹配
- Poj 3189 Steady Cow Assignment【二分+多重匹配】
- poj 3189 Steady Cow Assignment(多重匹配or二分最大流)
- TOJ 1671 Steady Cow Assignment -- 多重二分图匹配 + 二分查找
- Steady Cow Assignment(二分图多重匹配+二分)(网络流)
- ThinkPHP3.2.3 勾选子级自动选择父级
- win10激活的帖子
- python中%r和%s的区别
- MyBatis的XML配置文件(二)
- EM算法简单介绍
- poj3189 Steady Cow Assignment(枚举+多重匹配)
- 装箱与拆箱
- U盘做系统教程
- MyBatis的XML配置文件(三)
- 过滤器、监听器、拦截器作用及配置
- C#使用VS 2010在程序加载时创建Access数据库和表
- C/C++不同文件夹下包含头文件的方法及#include的使用
- yii2 慢执行日志
- 使用 jQuery.i18n.properties 实现 Web 前端的国际化