题目描述
一次舞会有n个男孩和n个女孩。每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞。每个男孩都不会和同一个女孩跳两首(或更多)舞曲。有一些男孩女孩相互喜欢,而其他相互不喜欢(不会”单向喜欢“)。每个男孩最多只愿意和k个不喜欢的女孩跳舞,而每个女孩也最多只愿意和k个不喜欢的男孩跳舞。给出每对男孩女孩是否相互喜欢的信息,舞会最多能有几首舞曲?

输入格式
第一行包含两个整数n和k。以下n行每行包含n个字符,其中第i行第j个字符为’Y’当且仅当男孩i和女孩j相互喜欢。

输出格式
仅一个数,即舞曲数目的最大值。

输入输出样例
输入 #1复制

3 0
YYY
YYY
YYY

输出 #1复制
3

说明/提示
N<=50 K<=30


我们可以注意到,每一场跳舞都需要n对人,所以我们肯定不能直接跑最大流,因为可能有些人不能匹配,但是有些人能匹配多次。

所以我们需要二分场数。

怎么check呢?
比如我们当前二分的场数为mid,然后我们把人都拆点,分为喜欢和不喜欢,然后限制S到喜欢和不喜欢最大之和为mid,所以我们需要把喜欢和不喜欢的点连在一起,流量为k。

因为没有单向喜欢,所以喜欢的连一起,不喜欢的连一起。


AC代码:

#pragma GCC optimize(2)
#include<bits/stdc++.h>
//#define int long long
using namespace std;
const int inf=0x3f3f3f3f;
const int N=1e3+10,M=1e5+10;
int n,k,s,t,h[N],l,r;
int head[N],nex[M],to[M],w[M],tot;
char g[55][55];
inline void ade(int a,int b,int c){to[++tot]=b; nex[tot]=head[a]; w[tot]=c; head[a]=tot;
}
inline void add(int a,int b,int c){ade(a,b,c);  ade(b,a,0);}
inline int bfs(){queue<int> q;    q.push(s);  memset(h,0,sizeof h); h[s]=1;while(q.size()){int u=q.front(); q.pop();for(int i=head[u];i;i=nex[i]){if(w[i]&&!h[to[i]]){h[to[i]]=h[u]+1;  q.push(to[i]);}}}return h[t];
}
int dfs(int x,int f){if(x==t) return f; int fl=0;for(int i=head[x];i&&f;i=nex[i]){if(w[i]&&h[to[i]]==h[x]+1){int mi=dfs(to[i],min(w[i],f));w[i]-=mi; w[i^1]+=mi; fl+=mi; f-=mi;}}if(!fl) h[x]=-1;return fl;
}
inline int dinic(){int res=0;while(bfs())  res+=dfs(s,inf);return res;
}
inline int check(int mid){tot=1;   memset(head,0,sizeof head);for(int i=1;i<=n;i++) add(s,i,mid),add(i,i+n,k),add(i+3*n,i+2*n,k),add(i+2*n,t,mid);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(g[i][j]=='Y')    add(i,j+2*n,1);else    add(i+n,j+3*n,1);}}return dinic()==n*mid;
}
signed main(){cin>>n>>k; l=0,r=n; t=n*4+1;for(int i=1;i<=n;i++)  scanf("%s",g[i]+1);while(l<r){int mid=l+r+1>>1;if(check(mid))    l=mid;else r=mid-1;}cout<<l<<endl;return 0;
}

[CQOI2009]跳舞相关推荐

  1. 有趣题目和认知合集(持续更新)

    写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...

  2. 题解 P1682 【过家家】

    P1682 过家家 题目描述 有2n个小学生来玩过家家游戏,其中有n个男生,编号为1到n,另外n个女生,编号也是1到n.每一个女生可以先选择一个和她不吵嘴的男生来玩,除此之外,如果编号为X的女生的朋友 ...

  3. BZOJ1305 [CQOI2009]dance跳舞 【网络流】

    1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec  Memory Limit: 162 MB Submit: 3714  Solved: 1572 [Submit][ ...

  4. bzoj1305【CQOI2009】dance 跳舞

    1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec   Memory Limit: 162 MB Submit: 2041   Solved: 853 [ Submit ...

  5. 【CQOI2009】跳舞

    [CQOI2009]跳舞 [题目描述] 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.  有一些男孩女孩相互喜欢,而 ...

  6. 【BZOJ 1305】 [CQOI2009]dance跳舞

    1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec   Memory Limit: 162 MB Submit: 1586   Solved: 666 [ Submit ...

  7. 【BZOJ1305】 [CQOI2009]dance跳舞

    Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会 ...

  8. [bzoj1305][CQOI2009]dance跳舞

    Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲.有一些男孩女孩相互喜欢,而其他相互不喜欢(不会 ...

  9. BZOJ1305: [CQOI2009]dance跳舞

    [传送门:BZOJ1305] 简要题意: 有n个男生和n个女生,男生和女生之间存在喜欢关系(只可能互相喜欢,不存在单向喜欢),给出一个字符矩阵代表男生女生之间的关系.他们要跳舞,跳舞的时候有歌,可以跳 ...

最新文章

  1. python 中文转unicode编码_Python 解码 Unicode 转义字符串
  2. 配置VMware ESXi 5事件发送到SYSLOG服务器
  3. 【MongoDB数据库】怎样安装、配置MongoDB
  4. ansible命令应用示例
  5. uva10160(dfs+状态压缩)
  6. echo 多行_Java中Scanner的用法:单行多行输入
  7. Mvvm 前端数据流框架精讲
  8. python面向对象属性_Python面向对象属性
  9. 下定决心博客搬家(再见csdn,For my oschina!)
  10. 反思 大班 快乐的机器人_幼儿园大班音乐优秀教案《小青蛙找家》含反思
  11. 计算机上缺少vsix安装程序,VSIX安装程序在Visual Studio 2017年(15.3)
  12. java 罗马数字_罗马数字 | 学步园
  13. 按键1按下数码管显示1,按键2按下数码管显示2,按键3按下8个LED灯实现流水灯效果;
  14. 线性代数(五)特征值和特征向量
  15. leshan基于OMALightweight M2M(LwM2M)协议的Java实现(入门)
  16. 手机号核验复开是什么意思?可能你涉及到这些行为了!
  17. 音视频笔记-视锥细胞和视杆细胞的区别
  18. 20年java面试_Java 20年
  19. 如何利用Framework模型生成IQD文件
  20. STM32平台的USART串口通信

热门文章

  1. 解决配置.zshrc后zsh命令突然失效的问题
  2. 0x12软考|网络工程师经验分享之下一代互联网(IPv6)
  3. 途南技术 | 微软OneNote如何导出pdf文件?不完美的小bug
  4. 微信批量退款php,商户平台-微信批量退款
  5. 爱车真皮内饰,不容忽视的甲醛安全问题!
  6. 串口控制74HC164C语言,STM8 74hc164串口输出扩为并口输出子程序
  7. 法国高等计算机工程学院,法国高等专业学院介绍
  8. CFileException
  9. 程序员学会了这套Lambda用法,何尝还会一筹莫展?
  10. 计算机是我们的抽象方式的自动,米罗超现实抽象画的计算机自动生成