题目大意:有n个女生,n个男生,每次一男一女跳舞。同一队只会跳一次。每个男孩最多只愿意和k个不喜欢的女孩跳舞,女孩同理。问舞会最多能有几首舞曲?

题解:二分跳了多少次舞,每次重建图,建超级原点和汇点,每个人拆点成喜欢和不喜欢两个点,之间连边,容量为mid。最后看流量与预计流量是否相同

卡点:1.超级原点和汇点与每个点的边的容量定为mid(应为k)

C++ Code:

#include<cstdio>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int n,k,mid,ans;
int d[250];
int q[250],h,t;
int start=1,end;
int head[250],cnt=2;
char ch[60];
struct Edge{
int to,nxt,cost;
}e[1000000];
int v[60][60];
inline int min(int a,int b){return a<b?a:b;}
void add(int a,int b,int c){
e[cnt]=(Edge){b,head[a],c};head[a]=cnt;
e[cnt^1]=(Edge){a,head[b],0};head[b]=cnt^1;
cnt+=2;
}
bool bfs(){
memset(d,0,sizeof d);
d[q[t=h=1]=start]=1;
while (h<=t){
int x=q[h++];
if (x==end)return true;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if (e[i].cost&&!d[to]){
d[to]=d[x]+1;
q[++t]=to;
}
}
}
return d[end];
}
int dfs(int x,int low){
if (x==end||!low)return low;
int res=0,w;
for (int i=head[x];i;i=e[i].nxt){
int to=e[i].to;
if (e[i].cost&&(d[x]==d[to]-1)){
w=dfs(to,min(e[i].cost,low-res));
e[i].cost-=w;
e[i^1].cost+=w;
res+=w;
if (res==low)return low;
}
}
if (!res)d[x]=-1;
return res;
}
void build(int mid){
memset(head,0,sizeof head);
cnt=2;
for(int i=1;i<=n;i++){
add(start,i+1,mid);
add(i+n+n+1,end,mid);
add(i+1,i+n+1,k);
add(i+n+n+n+1,i+n+n+1,k);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(v[i][j])add(i+1,j+n+n+1,1);
else add(i+n+1,j+n+n+n+1,1);
}
bool check(int mid){
build(mid);
// puts("la");
int ans=0,k;
while (bfs()){
k=dfs(start,inf);
if (k>0)ans+=k;
}
if (ans==mid*n)return true;
return false;
}
int main(){
scanf("%d%d",&n,&k);
for (int i=1;i<=n;i++){
scanf("%s",ch);
for (int j=1;j<=n;j++){
v[i][j]=(ch[j-1]=='Y');
}
}
end=(n<<2)+2;
// puts("lalal");
int l=0,r=n;
while (l<=r){
mid=l+r>>1;
if (check(mid))l=mid+1,ans=mid;
else r=mid-1;
// printf("%d\n",mid);
}
printf("%d\n",ans);
return 0;
}

  

[洛谷P3153] [CQOI2009]跳舞的更多相关文章

  1. AC日记——[CQOI2009]DANCE跳舞 洛谷 P3153

    [CQOI2009]DANCE跳舞 思路: 二分+最大流: 代码: #include <cstdio> #include <cstring> #include <iost ...

  2. 洛谷 P1627 [CQOI2009]中位数 解题报告

    P1627 [CQOI2009]中位数 题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式 ...

  3. 洛谷 P3155 [CQOI2009]叶子的染色 解题报告

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  4. P3153 [CQOI2009]跳舞

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

  5. 洛谷——P1627 [CQOI2009]中位数

    P1627 [CQOI2009]中位数 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 中位数的题目有关统计的话,可以转 ...

  6. [洛谷P3145] CQOI2009 循环赛

    问题描述 n队伍比赛,每两支队伍比赛一次,平1胜3负0. 给出队伍的最终得分,求多少种可能的分数表. 输入格式 第一行包含一个正整数n,队伍的个数.第二行包含n个非负整数,即每支队伍的得分. 输出格式 ...

  7. 题解 P3153 【[CQOI2009]跳舞】

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

  8. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  9. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

随机推荐

  1. Angular : 绑定, 参数传递, 路由

    如何把jquery导入angular npm install jquery --savenpm install @type/jquery --save-dev "node_modules/z ...

  2. Elasticsearch 常用API

    1.   Elasticsearch 常用API 1.1.数据输入与输出 1.1.1.Elasticsearch 文档   #在 Elasticsearch 中,术语 文档 有着特定的含义.它是指最顶 ...

  3. linux io 学习笔记(03)---共享内存,信号灯,消息队列

    system V IPC 1)消息队列 2)共享内存 3)信号灯(信号量集) 1.消息队列. ipcs -q 查看系统中使用消息队列的情况 ipcrm -q +msqid 删除消息队列 消息队列工作原 ...

  4. python基础之socket套接字基础part2

    基于UDP的socket 面向无连接的不可靠数据传输,可以没有服务器端,只不过没有服务器端,发送的数据会被直接丢弃,并不能到达服务器端 1 #客户端 2 import socket 3 ip_port ...

  5. 【娱乐向】制作Chrome天气预报扩展程序

    1.什么是Chrome扩展程序 Chrome扩展程序是一个用Web技术开发,用来扩展增强浏览器功能的软件.和一般的网页一样,Chrome扩展程序由html.js.css和图片等部分组成.Chrome插 ...

  6. OpenCV代码提取:flip函数的实现

    OpenCV中实现图像翻转的函数flip,公式为: 目前fbc_cv库中也实现了flip函数,支持多通道,uchar和float两种数据类型,经测试,与OpenCV3.1结果完全一致. 实现代码fli ...

  7. Qt 编译时遇到 error: [debug/qrc_music.cpp] Error 1

    第一种方式,清理编译文件 把Qdebug release 文件件都删除, 删除makefile 文件 尝试重新编译 以上是网上寻找的结果 以下是我的解决方法 如果还抱错,请检查qrc文件是否存在异常 ...

  8. CF 55D

    Volodya is an odd boy and his taste is strange as well. It seems to him that a positive integer numb ...

  9. QR码与DM码的区别

    DM无法表现汉字等其他形式,而QR码能用数据压缩方式来表示汉字,仅用13bit即可表示一个汉字,比其他二维条码表示汉字的效率提高了20%.相较而言,DM码信息容量小,应用简单.而QR在汉字处理上更有优 ...

  10. 团队项目-第十次scrum 会议

    时间:11.6 时长:20分钟 地点:主235教室走廊 工作情况 团队成员 已完成任务 待完成任务 解小锐 完成多种招聘方式的逻辑编写 陈鑫 实现游戏的存档功能 李金奇 添加多种招聘方式等功能 王辰昱 ...