POJ 3189
题意:
给你B个谷仓和n头牛,每个谷仓最多容纳m头牛。此时每头牛对每一个谷仓都有一个喜悦值,你需要把每一头牛都安排某个谷仓内,并且找出来那个每一头牛对它所住的谷仓打的分值,我们对这所有的分值取一个区间,使这个区间包含这每一个值。并且尽量使这个区间小一点。
题解:
对着区间的两个端点[l,r],先让l==r==1,之后如果在区间[l,r]中分配不成(就使用二分图多重匹配算法来判断)牛群的话就让r++,如果分配成功的话,那么就得让l++
代码:
1 #include<stdio.h>
2 #include<algorithm>
3 #include<string.h>
4 #include<iostream>
5 #include<queue>
6 #include<vector>
7 using namespace std;
8 const int maxn=1010;
9 const int INF=0x3f3f3f3f;
10 int n,m;
11 int g[maxn][maxn],mp[maxn][maxn],visit[maxn],match[maxn],link[maxn][maxn];
12 int cap[maxn],l,r;
13 int dfs_solve(int u)
14 {
15 int v;
16 for(int v=1;v<=m;v++)
17 {
18 if(mp[u][v]<=r && mp[u][v]>=l && !visit[v])
19 {
20 visit[v]=1;
21 if(match[v]<cap[v])
22 {
23 link[v][++match[v]]=u;
24 return 1;
25 }
26 for(int i=1;i<=cap[v];i++)
27 {
28 if(dfs_solve(link[v][i]))
29 {
30 link[v][i]=u;
31 return 1;
32 }
33 }
34 }
35 }
36 return 0;
37 }
38 int hungran()
39 {
40 int ans=0;
41 memset(match,0,sizeof(match));
42 memset(link,-1,sizeof(link));
43 for(int i=1;i<=n;++i)
44 {
45 memset(visit,0,sizeof(visit));
46 ans+=dfs_solve(i);
47 }
48 return ans;
49 }
50 int main()
51 {
52 int k,x;
53 while(~scanf("%d%d",&n,&m))
54 {
55 memset(mp,0,sizeof(mp));
56 for(int i=1;i<=n;++i)
57 {
58 for(int j=1;j<=m;++j)
59 {
60 int a;
61 scanf("%d",&a);
62 mp[i][a]=j;
63 }
64 }
65 for(int i=1;i<=m;++i)
66 scanf("%d",&cap[i]);
67 l=r=1;
68 int ans=INF;
69 while(l<=r && r<=m)
70 {
71 if(hungran()==n)
72 {
73 ans=min(ans,r-l+1);
74 l++;
75 }
76 else r++;
77 }
78 printf("%d\n",ans);
79 }
80 return 0;
81 }
POJ 3189的更多相关文章
- POJ 3189——Steady Cow Assignment——————【多重匹配、二分枚举区间长度】
Steady Cow Assignment Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I ...
- Poj 3189 Steady Cow Assignment (多重匹配)
题目链接: Poj 3189 Steady Cow Assignment 题目描述: 有n头奶牛,m个棚,每个奶牛对每个棚都有一个喜爱程度.当然啦,棚子也是有脾气的,并不是奶牛想住进来就住进来,超出棚 ...
- poj 3189(枚举+多重匹配)
题目链接:http://poj.org/problem?id=3189 思路:由于题目要求最小的差值,而Range最多也才20,因此我们可以枚举上下限,多重匹配验证即可. http://paste.u ...
- POJ 3189 二分+Dinic
题意: 思路: 二分跨度 枚举最低座次 建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边 判判流量是不是等于n 一开始写得是直接枚举 ...
- POJ 3189 Steady Cow Assignment
题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 题目输入: 首先是两个 ...
- O - Steady Cow Assignment - POJ 3189(多重匹配+枚举)
题意:有N头奶牛,M个牛棚,每个牛棚都有一个容量,并且每个牛对牛棚都有一个好感度,现在重新分配牛棚,并且使好感觉最大的和最小的差值最小. 分析:好感度貌似不多,看起来可以枚举一下的样子,先试一下把 注 ...
- POJ 3189 Steady Cow Assignment【网络流】
题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 牛棚个数最多为20,那么直 ...
- POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】
<题目链接> 题目大意: 有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进 ...
- Steady Cow Assignment POJ - 3189 (最大流+匹配)
Farmer John's N (1 <= N <= 1000) cows each reside in one of B (1 <= B <= 20) barns which ...
随机推荐
- Jmeter(三十五) - 从入门到精通进阶篇 - 关联(详解教程)
1.简介 上一篇中介绍了如果想要同时发送多条请求,那么怎样才能让每条数据某些请求参数改变呢.这就用到了jMeter参数化.在实际测试场景中,我们往往还有这样的需求,登录后服务器响应的token作为下次 ...
- 谈谈你不知道的gist
1.Gist是什么关于Gist的详细介绍,请阅读官方文档About gists,下面只简略介绍部分功能: Gist是一种与其他人共享代码片段和粘贴的简单方法. 当您需要与同事或朋友共享示例代码或技术时 ...
- 利用css和jquery制成弹幕
1.首先上图看下效果 2.废话不多说,直接上代码 1>html代码 <div class="barrage"> <div class="scree ...
- Linux学习笔记 | 常见错误之账户密码正确但是登录不进去系统
前言: 笔者今日由于Linux版本的原因,需要Linux内核版本不能太高的系统,而日常使用的ubuntu系统不能满足需求,于是新建了一个虚拟机,选用的系统是Ubuntu16的,配置了一下午的各种依赖环 ...
- UVA - 185 Roman Numerals
题目链接: https://vjudge.net/problem/UVA-185 思路: 剪枝.回溯 注意回溯的时候,是从当前点的下一个开始,而不是从已经遍历的个数点开始!!不然回溯有问题! 思路参考 ...
- 单片机—Arduino UNO-R3—学习笔记001
连接方法 下载Arduino软件 安装完成打开如图所示 观察右下角的连接接口"Arduino Uno在COM(X)" 在工具-->端口-->选择之前查看的端口 即为连接 ...
- uni-app开发经验分享一: 多页面传值的三种解决方法
开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...
- Py其他内置函数,文件修改
其他内置函数 1.abs函数,取绝对值 print(abs(-1)) 2.all函数,判断可迭代对象是否全为真,有假直接假 假:0,'',None print(all([1,2,'1'])) prin ...
- GlusterFS分布式存储系统复制集更换故障Brick操作记录
场景: GlusterFS 3节点的复制集,由于磁盘故障,其中一个复制集需要重装系统,所以需要重装glusterfs并将该节点加入glusterfs集群 一. 安装GlusterFS 首先在重装系统节 ...
- jQuery json遍历渲染到页面并且拼接html
jQuery 处理 json遍历在页面中显示,并且拼接html. 1 <title>json多维数组遍历渲染</title> 2 3 <body> 4 <di ...