poj3189--Steady Cow Assignment (二分多重匹配)
来源:互联网 发布:c语言sqrt是什么意思 编辑:程序博客网 时间:2024/05/29 07:20
题目来源:http://poj.org/problem?id=3189
题意
题意杀。。。
额,给出了n头牛,还有b个牛圈,然后每头牛对b个牛圈内心深处有自己的评价,也就是相对来说更喜欢去哪个牛圈,有自己的排名。。。然后嘞,牛圈在牛心中的排名差计算方法为:所有牛中最大排名和最小排名之差。问最小的排名差。。。
思路
简单的一个多重匹配问题,就是题意不好理解,,多重匹配里有两种解法,一种使用二分范围,一种是类似滑动窗的枚举。。
代码
#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;int ranks[maxn][maxn];int group[maxn][maxn],vis[maxn],top[maxn];int n,m,left,right;void init(){ for(int i=1; i<=n; i++) { int x; for(int j=1; j<=m; j++) { scanf("%d",&x); ranks[i][x]=j; } } for(int i=1; i<=m; i++) scanf("%d",&top[i]);}bool dfs(int i){ for(int j=1; j<=m; j++) { if(!vis[j]&&ranks[i][j]>=left&&ranks[i][j]<=right) { vis[j]=1; if(group[j][0]<top[j]) { group[j][++group[j][0]]=i; return true; } for(int k=1; k<=group[j][0]; k++) { if(dfs(group[j][k])) { group[j][k]=i; return true; } } } } return false;}bool judge(){ memset(group,0,sizeof(group)); for(int i=1; i<=n; i++) { memset(vis,0,sizeof(vis)); if(!dfs(i)) return false; } return true;}void solve(){ int ret=0x3f3f3f3f; right=1,left=1; while(left<=right&&right<=m) { if(judge()) { int tmp=right-left+1; if(tmp<ret) ret=tmp; left++; } else right++; } printf("%d\n",ret);}int main(){ while(~scanf("%d%d",&n,&m)) { init(); solve(); }}
阅读全文
0 0
- poj3189--Steady Cow Assignment (二分多重匹配)
- poj3189 Steady Cow Assignment --- 多重匹配,二分图匹配解法
- poj3189 Steady Cow Assignment(枚举+多重匹配)
- POJ 3189 Steady Cow Assignment(二分+多重匹配)
- POJ3189-Steady Cow Assignment
- POJ3189 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【二分+多重匹配】
- Steady Cow Assignment(二分图多重匹配+二分)(网络流)
- POJ3189 Steady Cow Assignment 二分枚举+dinic最大流
- poj 3189 Steady Cow Assignment(多重匹配or二分最大流)
- 解题报告 之 POJ3189 Steady Cow Assignment
- TOJ 1671 Steady Cow Assignment -- 多重二分图匹配 + 二分查找
- POJ 3189 Steady Cow Assignment (枚举+二分图的多重匹配)
- POJ 3189--Steady Cow Assignment【二分图多重匹配 && 最大流求解 && 枚举 && 经典】
- 如何理解为body设置背景时整个屏幕都显示
- jar包的冲突问题如何解决
- mac os 程序对拍(同Linux对拍) 以及c++文件读入
- 读ini文件
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence (构造 贪心)
- poj3189--Steady Cow Assignment (二分多重匹配)
- java编程思想学习笔记(一)
- 机器学习绪论
- Quartz定时任务实现自动发送邮件
- android之单元测试问题汇总
- 变形课-HDU-深搜
- 定时任务 模块 node-schedule
- 关于JS实现用户登录验证(部分代码简写)
- 求100以内七的被数或带七的数