[bzoj1305]跳舞
考虑如果没有k个人,那么就是裸的二分答案+最大流
对于这k个人,再在原来的每一个点裂点,中间的流量为k,然后裂出来的点向所有不能匹配的点连边,再二分答案+最大流即可
- 1 #include<bits/stdc++.h>
- 2 using namespace std;
- 3 #define N 205
- 4 struct ji{
- 5 int nex,to,len;
- 6 }edge[N*N];
- 7 queue<int>q;
- 8 int E,n,k,head[N],work[N],d[N];
- 9 char s[N][N];
- 10 void add(int x,int y,int z){
- 11 edge[E].nex=head[x];
- 12 edge[E].to=y;
- 13 edge[E].len=z;
- 14 head[x]=E++;
- 15 if (E&1)add(y,x,0);
- 16 }
- 17 bool bfs(){
- 18 memset(d,-1,sizeof(d));
- 19 q.push(0);
- 20 d[0]=0;
- 21 while (!q.empty()){
- 22 int k=q.front();
- 23 q.pop();
- 24 for(int i=head[k];i!=-1;i=edge[i].nex)
- 25 if ((edge[i].len)&&(d[edge[i].to]<0)){
- 26 d[edge[i].to]=d[k]+1;
- 27 q.push(edge[i].to);
- 28 }
- 29 }
- 30 return d[4*n+1]>=0;
- 31 }
- 32 int dfs(int k,int s){
- 33 if (k>4*n)return s;
- 34 for(int &i=work[k];i!=-1;i=edge[i].nex)
- 35 if ((edge[i].len)&&(d[edge[i].to]==d[k]+1)){
- 36 int p=dfs(edge[i].to,min(s,edge[i].len));
- 37 if (p){
- 38 edge[i].len-=p;
- 39 edge[i^1].len+=p;
- 40 return p;
- 41 }
- 42 }
- 43 return 0;
- 44 }
- 45 int dinic(){
- 46 int k,ans=0;
- 47 while (bfs()){
- 48 memcpy(work,head,sizeof(head));
- 49 while (k=dfs(0,0x3f3f3f3f))ans+=k;
- 50 }
- 51 return ans;
- 52 }
- 53 bool pd(int mid){
- 54 memset(head,-1,sizeof(head));
- 55 E=0;
- 56 for(int i=1;i<=n;i++){
- 57 add(0,i,mid);
- 58 add(i,i+n,k);
- 59 add(i+2*n,4*n+1,mid);
- 60 add(i+3*n,i+2*n,k);
- 61 }
- 62 for(int i=1;i<=n;i++)
- 63 for(int j=0;j<n;j++)
- 64 if (s[i][j]=='Y')add(i,j+2*n+1,1);
- 65 else add(i+n,j+3*n+1,1);
- 66 return dinic()==mid*n;
- 67 }
- 68 int main(){
- 69 scanf("%d%d",&n,&k);
- 70 for(int i=1;i<=n;i++)scanf("%s",s[i]);
- 71 int l=0,r=n;
- 72 while (l<r){
- 73 int mid=(l+r+1>>1);
- 74 if (pd(mid))l=mid;
- 75 else r=mid-1;
- 76 }
- 77 printf("%d",l);
- 78 }
[bzoj1305]跳舞的更多相关文章
- 【BZOJ1305】跳舞(网络流)
[BZOJ1305]跳舞(网络流) 题面 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一 ...
- [BZOJ1305][CQOI2009]跳舞(网络流)
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3944 Solved: 1692[Submit][St ...
- 【BZOJ1305】dance跳舞(最大流,裂点,二分答案)
题意:一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲. 有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”). ...
- Bzoj1305 [CQOI2009]dance跳舞
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1221 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时 ...
- BZOJ-1305 dance跳舞 建图+最大流+二分判定
跟随YveH的脚步又做了道网络流...%%% 1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 2119 S ...
- 【BZOJ1305】 [CQOI2009]dance跳舞
Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会 ...
- 【BZOJ1305】【CQOI2009】 dance跳舞
看menci的博客点出二分的思路然后做出来,menci太强辣 原题: 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲. ...
- bzoj千题计划130:bzoj1305: [CQOI2009]dance跳舞
http://www.lydsy.com/JudgeOnline/problem.php?id=1305 每个人拆为喜欢(yes)和不喜欢(no)两个点 二分答案 1.每两个人之间只能跳一次 喜欢则 ...
- BZOJ1305 [CQOI2009]dance跳舞 【网络流】
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 3714 Solved: 1572 [Submit][ ...
随机推荐
- IDEA Web渲染插件开发(二)— 自定义JsDialog
<IDEA Web渲染插件开发(一)>中,我们了解到了如何编写一款用于显示网页的插件,所需要的核心知识点就是IDEA插件开发和JCEF,在本文中,我们将继续插件的开发,为该插件的JS Di ...
- Jekins 插件Extended Choice Parameter显示Json Parameter Type遇到的问题
在jenkins中使用Extended Choice Parameter插件用来显示自定义的多选项,尝试通过groovy script来显示,正常,但查看它的例子,发现它例子中多选是通过类型 Json ...
- Java秘诀!Java赋值运算符介绍
运算符丰富是 Java 语言的主要特点之一,它提供的运算符数量之多,在高级语言中是少见的. Java 语言中的运算符除了具有优先级之外,还有结合性的特点.当一个表达式中出现多种运算符时,执行的先后顺序 ...
- jenkins容器内安装Python3之后使用pip3 install xxx失败,可以考虑换国内源
问题:pip3 install xxx失败 方案一:修改配置文件 首先在当前用户目录下建立文件夹.pip,然后在文件夹中创建pip.conf文件,再将源地址加进去即可. mkdir ~/.pipvim ...
- 关于SSTI的坑
SSTI注入 进过几天的CSDN和博客园以及个人博客的查询,我大概讲一下我对SSTI模板注入的理解. SSTI注入指的是模板注入(应该翻译就是模板注入) 就站在我所了解的知识水平(大概就是大一随便水了 ...
- 2020.5.4-ICPC Pacific Northwest Regional Contest 2019
A. Radio Prize All boring tree-shaped lands are alike, while all exciting tree-shaped lands are exci ...
- Redis 面试常见问题———缓存雪崩、缓存击穿以及缓存穿透
在开发中会面临缓存异常可能会出现三个问题,分别是缓存雪崩.缓存击穿和缓存穿透.这三个问题会导致大量请求从缓存转移到数据库,如果请求的并发量很大的话,就会导致数据库崩溃.所以在面试官也会经常问这些问题. ...
- Docker 常见命令
Docker 运行流程 辅助命令 # 1.安装完成辅助命令 docker version -------------------------- 查看docker的信息 docker info ---- ...
- 23.合并k个有序链表
合并 k 个排序链表,返回合并后的排序链表.请分析和描述算法的复杂度. 示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1-&g ...
- Java:阻塞队列
Java:阻塞队列 本笔记是根据bilibili上 尚硅谷 的课程 Java大厂面试题第二季 而做的笔记 1. 概述 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭 阻塞队列 B ...