[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][ ...
随机推荐
- Oracle基础命令操作总结
第1章 oracle命令集 1.1 重启数据库 1.1.1 启动数据库 su -root 切换到oracle安装用户下,我的是root source .bash_pro ...
- c++ fstream feekg讨论
#include <iostream> #include <fstream> using namespace std; int main() { std::ifstream f ...
- 题解 [SHOI2012]随机树
题目传送门 Description \(n\le 100\) Solution Problem 1 不难看出,答案就是: \[1+\sum_{i=1}^{n-1} 2/(i+1) \] Problem ...
- CF1082E Increasing Frequency (multiset+乱搞+贪心)
题目大意: \(给你n个数a_i,给定一个m,你可以选择一个区间[l,r],让他们区间加一个任意数,然后询问一次操作完之后,最多能得到多少个m\) QWQ 考场上真的** 想了好久都不会,直到考试快结 ...
- python中\t、\n含义
\t :代表着四个空格也就是一个tab \n:代表着换行
- Frida过反调试
原理介绍:https://www.anquanke.com/post/id/85996 code setImmediate(function () { Java.perform(function () ...
- jmeter基础功能及认识
1.基础知识: JMeter是免费开源的,纯java开发的性能测试工具,可以测试静态和动态的资源,例如:静态文件.java服务小程序.CGI脚本.java对象.数据库.FTP服务器.邮件服务器和Per ...
- 【UE4 C++ 基础知识】<5> 容器——TArray
概述 TArray 是UE4中最常用的容器类.其速度快.内存消耗小.安全性高. 其设计时未考虑扩展问题,因此建议在实际操作中勿使用 新建(new) 和 删除(delete) 创建或销毁 TArray ...
- Beta阶段初始任务分配
项目 内容 这个作业属于哪个课程 2021春季软件工程(罗杰 任健) 这个作业的要求在哪里 团队项目-计划-Beta阶段说明书 一.Beta阶段总体规划 根据用户反馈与测试结果修复alpha版本的bu ...
- makedown笔记
makedown语法 表格 这个表格的主题 |姓名|性别|年龄|职业| | ----- | ----- | ----- | ----- | |张三|男|34|码农| |李四|男|27|代驾| 这个表格 ...