题面见 https://www.luogu.org/problemnew/show/P3153

题意简述:有n个男生,n个女生,每一首歌时两位男女配对,然后同一对男女只能跳一场,一个人只会与不喜欢的人跳k场,求最大可以满员跳几场

这个题目看完可以猜测到这道题需要二分答案进行check()

然后就是建图,首先在check的时候查看是否所有边都流满了,其次因为一对男女跳一场,所以建边容量为1,然后男生和女生分别向原点和汇点连容量为mid的边

最后就是如何实现与不喜欢的人跳k场,根据网络流的常规操作,拆个点就很不错,这个时候可以选择这样拆点把一个人拆成两个分点,一个总点,一个总点代表有mid流量进来,两个分点分别和喜欢还有不喜欢的人相连,总点向不喜欢的人连k容量,向喜欢的连mid容量,然后分点分别与喜欢和不喜欢相连

(我最后改成了把喜欢的分点合并到总点里面去)

然后就是代码了

// luogu-judger-enable-o2
#include<bits/stdc++.h>
#include<queue>
using namespace std;
#define INF 0x3f3f3f3f
inline int read(){
int w=,f=;
char ch=getchar();
while(ch<''||ch>''){
if(ch=='-') f=-;
ch=getchar();
}
while(ch>=''&&ch<=''){
w=(w<<)+(w<<)+ch-;
ch=getchar();
}
return w*f;
}
int n,m,cur[],head[],cnt=,depth[],maxflow,S,T;
bool debug;
const int p=;
struct Edge{
int from,to,flow,dis,next;
}edge[];
queue<int> q;
inline void addedge(int u,int v,int w){
cnt++;
edge[cnt].from=u;
edge[cnt].to=v;
edge[cnt].flow=w;
edge[cnt].next=head[u];
head[u]=cnt;
}
inline void ins(int u,int v,int w){
addedge(u,v,w);addedge(v,u,);
}
int mapp[][];
inline bool bfs(int st,int ed){
memset(depth,,sizeof(depth));int i,j,k;
for(i=;i<=;i++) cur[i]=head[i];
depth[st]=;q.push(st);
while(!q.empty()){
int u=q.front();q.pop();
for(i=head[u];i;i=edge[i].next){
int v=edge[i].to;
if(!depth[v]&&edge[i].flow){
q.push(v);depth[v]=depth[u]+;
}
}
}
return depth[ed];
}
inline int dfs(int u,int ed,int limit){
if(u==ed||!limit) return limit;
int f,i,j,k;int flow=;
for(i=cur[u];i;i=edge[i].next){
cur[u]=i;int v=edge[i].to;
if(depth[v]==depth[u]+&&(f=dfs(v,ed,min(limit,edge[i].flow)))){
limit-=f;flow+=f;
edge[i].flow-=f;edge[i^].flow+=f;
if(!limit) break;
}
}
return flow;
}
inline void Dinic(){
while(bfs(S,T)){
//cout<<"fuck1"<<endl;
maxflow+=dfs(S,T,INF);
}
}
inline bool check(int a){
S=;T=;int i,j,k;cnt=;maxflow=;
memset(head,,sizeof(head));
for(i=;i<=n;i++){
ins(S,i,a);
ins(i,i+n,m);
ins(i+*n,i+*n,m);
ins(i+*n,T,a);
}
for(i=;i<=n;i++){
for(j=;j<=n;j++){
if(mapp[i][j]) ins(i,j+*n,);
else ins(i+n,j+*n,);
}
}
Dinic();
//cout<<a<<" "<<maxflow<<endl;
if(maxflow==a*n) return true;
else return false;
}
int main(){
n=read();m=read();int i,j,k;
for(i=;i<=n;i++){
for(j=;j<=n;j++){
char ch;cin>>ch;
if(ch=='Y') mapp[i][j]=;
else mapp[i][j]=;
}
}
int l=,r=n+m;int ans;
while(l<=r){
int mid=(l+r)>>;
//cout<<mid<<" "<<check(mid)<<endl;
if(check(mid)) l=mid+,ans=mid;
else r=mid-;
}
cout<<ans<<endl;
return ;
}

CQOI跳舞(网络流+二分答案)的更多相关文章

  1. bzoj1305: [CQOI2009]dance跳舞(二分答案+网络流)

    1305: [CQOI2009]dance跳舞 题目:传送门 题解: 一眼网络流基础建模...然后就GG了 二分答案+拆点建边+最大流判断: 把男女生拆为男1,男2,女1,女2 1.男1和男2还有女1 ...

  2. BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案

    链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...

  3. BZOJ 2406: 矩阵 [上下界网络流 二分答案]

    2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...

  4. BZOJ 1733: [Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 网络流 + 二分答案

    Description Farmer John is constructing a new milking machine and wishes to keep it secret as long a ...

  5. poj2112 网络流+二分答案

    Optimal Milking Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 18083   Accepted: 6460 ...

  6. 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)

    洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...

  7. 【BZOJ3993】星际战争(网络流,二分答案)

    [BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...

  8. 【BZOJ5251】【八省联考2018】劈配(网络流,二分答案)

    [BZOJ5251][八省联考2018]劈配(网络流,二分答案) 题面 洛谷 BZOJ Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序 ...

  9. 【BZOJ1305】dance跳舞(最大流,裂点,二分答案)

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

随机推荐

  1. apache 访问状态 分析

    状态查看: 1.查看apache 各状态连接数 [root]#netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' ...

  2. php 安装扩展插件实例-gd库

    今天给php 安装一个扩展插件 gd库   一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...

  3. bootstrap--网格化布局

    1.响应式网格系统随着屏幕或视口(viewport)尺寸的增加,系统会自动分为最多12列 2.规则 行必须放置在 .container class 内,以便获得适当的对齐(alignment)和内边距 ...

  4. flyway使用简介

    官网 https://flywaydb.org/ 背景 Flyway是独立于数据库的应用.管理并跟踪数据库变更的数据库版本管理工具.用通俗的话讲,Flyway可以像Git管理不同人的代码那样,管理不同 ...

  5. C# 如何实现完整的INI文件读写类

    作者: 魔法软糖 日期: 2020-02-27 引言 ************************************* .ini 文件是Initialization File的缩写,即配置文 ...

  6. 刷题94. Binary Tree Inorder Traversal

    一.题目说明 题目94. Binary Tree Inorder Traversal,给一个二叉树,返回中序遍历序列.题目难度是Medium! 二.我的解答 用递归遍历,学过数据结构的应该都可以实现. ...

  7. Nginx三大主要功能

    1.做静态资源服务器,可以用于前端项目发布,图片文件文件等静态服务器. 2.做反向代理服务器,域名往往配置在Nginx上,真正的业务服务器躲在其身后. 3.做负载均衡服务器,作为负载集群的入口网关. ...

  8. SharePoint 开发另存文档库中文档

    前言 最近碰到这样一个问题,用前端框架读取SharePoint文档库中文档的时候,如果是PDF/TXT等类型的文档,不会出现另存为的操作,而是在浏览器中在线打开,这样用户是无法接受的. 解决方法 通过 ...

  9. windows7安装.NET Framework 4.5.2 框架(迅雷下载链接)

    .NET Framework 4.5.2 框架 数据库安装windows7安装mysql时需要 迅雷下载链接: https://download.microsoft.com/download/E/2/ ...

  10. C#中 ref 关键字的认识和理解

    之前接手老项目的时候有遇到一些的方法参数中使用了ref关键字加在传参的参数前面的情况.对于新手,这里介绍和讲解一下ref的用法和实际效果. CLR中默认所有方法的参数传递方式都是传值,也就是说不管你传 ...