题目大意:有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. 【mysql学习笔记整理】

    /*mysql学习笔记整理*/ /*常用的数据库操作对象*/ #库的操作#创建#数据库的创建USE mysql;CREATE DATABASE db_x;#删除#删除数据库DROP DATABASE ...

  2. 使用java多线程分批处理数据工具类

    最近由于业务需要,数据量比较大,需要使用多线程来分批处理,提高处理效率和能力,于是就写了一个通用的多线程处理工具,只需要实现自己的业务逻辑就可以正常使用,现在记录一下 主要是针对大数据量list,将l ...

  3. 仿造vue-resource的formdata传对象

    众插件不支持同步,也是没办法的事情,具体为啥就不分析了,确实搞不懂. 一直用vue-resource的post,觉得很舒服. 然,没办法只能仿造一个,自己提供一个同步方法 几个点先摆清楚 1. .th ...

  4. struts2官方 中文教程 系列十三:利用通配符选择方法

    介绍 在本教程中,我们将介绍如何在struts.xml中配置action节点以达到仅使用一个action节点将几个不同的url关联到特定action类的特定方法.这样做的目的是减少struts.xml ...

  5. java Vector向量

    9.3.4 Vector向量 [专业IT培训机构,真正零首付入学www.bjsxt.com] Vector底层是用数组实现的List,相关的方法都加了同步检查,因此“线程安全,效率低”. 比如,ind ...

  6. ABP框架设置默认语言

    在Global.asax文件中设置 private readonly IAbpWebLocalizationConfiguration _webLocalizationConfiguration; p ...

  7. 在PXC中重新添加掉线节点

      Preface       When we add a new node into PXC structure,it will estimate the mothed(IST/SST) to tr ...

  8. 生产者与消费者-N:1-基于list

    多个生产者/一个消费者: /** * 生产者 */ public class P { private MyStack stack; public P(MyStack stack) { this.sta ...

  9. python接口测试(三)——Excell文件读取进行参数化

    python进行http请求时,需要对参数进行参数化,此时就可以运用Excel进行,具体如下: 1.梳理出请求中那些参数需要参数化,然后新建一个Excel,如图: 2.读取Excel中的内容,在读取前 ...

  10. 【转】用ASP.NET Core 2.1 建立规范的 REST API -- 缓存和并发

    原文链接:https://www.cnblogs.com/cgzl/p/9165388.html 本文所需的一些预备知识可以看这里: http://www.cnblogs.com/cgzl/p/901 ...