POJ 3189 二分+Dinic
题意:
思路:
二分跨度 枚举最低座次
建图:源点向每头牛连边权为1的边 每头牛向当前枚举的B的区间这段连上边权为1的边 所有座次向汇点连边权为牛棚容量的边
判判流量是不是等于n
一开始写得是直接枚举答案,在这个答案下枚举座次最低的值 T了。。
(然后我看了一发数据 )
数据中有这样一个点:1000 20 balabala
答案是20
这就很蛋疼了 我枚举了200次 略多 (虽然在我电脑上还是能1s之内跑出来 但是POJ评测机并不快啊)
我就把答案的那个20二分了一下 变成了6
枚举大概几十次 嗯 A了 938ms
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 1055
int n,b,map[N][25],B[25],e=1050,answer;
struct Dinic{
int first[N],next[60*N],v[60*N],w[60*N],vis[N],tot;
void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
bool tell(){
memset(vis,-1,sizeof(vis));
queue<int>q;q.push(0);vis[0]=0;
while(!q.empty()){
int t=q.front();q.pop();
for(int i=first[t];~i;i=next[i])
if(w[i]&&vis[v[i]]==-1)
q.push(v[i]),vis[v[i]]=vis[t]+1;
}
return vis[e]!=-1;
}
int zeng(int x,int y){
if(x==e)return y;
int r=0;
for(int i=first[x];~i&&y>r;i=next[i])
if(vis[v[i]]==vis[x]+1&&w[i]){
int t=zeng(v[i],min(w[i],y-r));
w[i]-=t,w[i^1]+=t,r+=t;
}
if(!r)vis[x]=-1;
return r;
}
int flow(){
int ans=0,jy;
while(tell())while(jy=zeng(0,0x3fffffff))ans+=jy;
return ans;
}
bool solve(int begin,int end){
memset(first,-1,sizeof(first)),tot=0;
for(int i=1;i<=n;i++)
for(int j=begin;j<=end;j++)
add(i,1000+map[i][j],1),add(1000+map[i][j],i,0);
for(int i=1;i<=b;i++)add(1000+i,e,B[i]),add(e,1000+i,0);
for(int i=1;i<=n;i++)add(0,i,1),add(i,0,0);
return flow()==n;
}
}dinic;
int main(){
scanf("%d%d",&n,&b);
for(int i=1;i<=n;i++)
for(int j=1;j<=b;j++)
scanf("%d",&map[i][j]);
for(int i=1;i<=b;i++)scanf("%d",&B[i]);
int l=0,r=b;
while(l<=r){
int Mid=(l+r)>>1;
for(int i=1;i+Mid<=b;i++)
if(dinic.solve(i,i+Mid)){
answer=Mid,r=Mid-1;
goto ed;
}
l=Mid+1;
ed:;
}
printf("%d\n",answer+1);
}
POJ 3189 二分+Dinic的更多相关文章
- poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分, dinic, isap
poj 2391 Ombrophobic Bovines, 最大流, 拆点, 二分 dinic /* * Author: yew1eb * Created Time: 2014年10月31日 星期五 ...
- 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 - 2018 二分+单调子段和
依然是学习分析方法的一道题 求一个长度为n的序列中的一个平均值最大且长度不小于L的子段,输出最大平均值 最值问题可二分,从而转变为判定性问题:是否存在长度大于等于L且平均值大于等于mid的字段和 每个 ...
- POJ2391 Floyd+离散化+二分+DINIC
题意: 有n个猪圈,每个猪圈里面都有一定数量的猪(可能大于当前猪圈的数量),每个猪圈都有自己的容量,猪圈与猪圈之间给出了距离,然后突然下雨了,问多久之后所有的猪都能进圈. 思路: ...
- poj 2112 floyd+Dinic最大流+二分最小值
题目大意是: K台挤奶机器,C头牛,K不超过30,C不超过200,每台挤奶机器最多可以为M台牛工作,给出这些牛和机器之间,牛和牛之间,机器与机器之间的距离,在保证让最多的牛都有机器挤奶的情况下,给出其 ...
- POJ 3189 Steady Cow Assignment 【二分】+【多重匹配】
<题目链接> 题目大意: 有n头牛,m个牛棚,每个牛棚都有一定的容量(就是最多能装多少只牛),然后每只牛对每个牛棚的喜好度不同(就是所有牛圈在每个牛心中都有一个排名),然后要求所有的牛都进 ...
- poj 3228(二分+最大流)
题目链接:http://poj.org/problem?id=3228 思路:增设一个超级源点和一个超级汇点,源点与每一个gold相连,容量为gold数量,汇点与仓库相连,容量为仓库的容量,然后就是二 ...
- Optimal Milking(POJ2112+二分+Dinic)
题目链接:http://poj.org/problem?id=2112 题目: 题意:有k台挤奶机,c头奶牛,每台挤奶机每天最多生产m的奶,给你每个物品到其他物品的距离(除了物品到自己本省的距离为0外 ...
随机推荐
- sql 技巧
1.想把一张表的 某个字段或多个字段 的 所有数据 复制到另外一张表里 insert into 表名(字段) select (字段) from 表名 2.from Users u , IN(u.ro ...
- 使用yum配置lnmp环境(CentOS7.6)
一.安装版本详情 Server: MariaDB Server version: 5.5.60-MariaDB MariaDB Server [root@ln-125 ~]# cat /etc/red ...
- 《virtual san 最佳实践》节选 Virtual SAN的发展与现状
Virtual SAN的发展与现状Virtual SAN已经迭代更新到第四代,即Virtual SAN 6.2.通过三次主版本迭代,Virtual SAN已经成为一款非常成熟的软件定义存储软件.在此, ...
- C#-反射知识点
1.反射是基于Sytem.Type的,里面的很多方法是system.reflection里面的 MethodInfo[] tt= t.GetType().GetMethods(); //t是strin ...
- 我有一个idea,但是没有钱,又没技术怎么办?
我想你还少讲一件事,就是同时如果你也没什么明确的商业计划,恭喜,那你有机会成为马云第二,因为他曾说过自己的成功要素就是「没钱」.「不懂技术」.「没有计划」,要是这么刚好让你从事互联网产业,我看不出三年 ...
- glm编译错误问题解决 formal parameter with __declspec(align('16')) won't be aligned
參考:http://stackoverflow.com/questions/25300116/directxxmmatrix-error-c2719-declspecalign16-wont-be-a ...
- Linux下安装Mysql(RPM安装)
一.去官网下载本次安装须要的mysql版本号.我们须要安装的是5.1版本号的且centos系统是64位的.所下面载的是MySQL-community-5.1.73-1.rhel5.x86_64.rpm ...
- hdoj--2709--Sumsets(数位dp)
Sumsets Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- [-] Failed to load plugin from /usr/share/metasploit-framework/plugins/db_autopwn: No classes were loaded from /usr/share/metasploit-framework/plugins/db_autopwn in the Msf::Plugin namespace.
问题详情 然后,执行,出现如下问题,则说明大家的这个文件,下载不是完整的或者你上传不完整. msf > load db_autopwn [-] Failed to load plugin fro ...
- JavaScript总结(3)
第3章 获取用户的输入 <script>10 intA=prompt("请输入第一个数字","");11 intB=prompt("请输入 ...