CQOI跳舞(网络流+二分答案)
题面见 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跳舞(网络流+二分答案)的更多相关文章
- bzoj1305: [CQOI2009]dance跳舞(二分答案+网络流)
1305: [CQOI2009]dance跳舞 题目:传送门 题解: 一眼网络流基础建模...然后就GG了 二分答案+拆点建边+最大流判断: 把男女生拆为男1,男2,女1,女2 1.男1和男2还有女1 ...
- BZOJ 3993 [SDOI2015]星际战争 | 网络流 二分答案
链接 BZOJ 3993 题解 这道题挺棵的-- 二分答案t,然后源点向武器连t * b[i], 武器向能攻击的敌人连1, 敌人向汇点连a[i],如果最大流等于所有敌人的a[i]之和则可行. #inc ...
- BZOJ 2406: 矩阵 [上下界网络流 二分答案]
2406: 矩阵 题意:自己去看吧,最小化每行每列所有元素与给定矩阵差的和的绝对值中的最大值 又带绝对值又带max不方便直接求 显然可以二分这个最大值 然后判定问题,给定矩阵每行每列的范围和每个元素的 ...
- 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 ...
- poj2112 网络流+二分答案
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 18083 Accepted: 6460 ...
- 洛谷P2402 奶牛隐藏(网络流,二分答案,Floyd)
洛谷题目传送门 了解网络流和dinic算法请点这里(感谢SYCstudio) 题目 题目背景 这本是一个非常简单的问题,然而奶牛们由于下雨已经非常混乱,无法完成这一计算,于是这个任务就交给了你.(奶牛 ...
- 【BZOJ3993】星际战争(网络流,二分答案)
[BZOJ3993]星际战争(网络流,二分答案) 题面 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进攻X军团 ...
- 【BZOJ5251】【八省联考2018】劈配(网络流,二分答案)
[BZOJ5251][八省联考2018]劈配(网络流,二分答案) 题面 洛谷 BZOJ Description 一年一度的综艺节目<中国新代码>又开始了. Zayid从小就梦想成为一名程序 ...
- 【BZOJ1305】dance跳舞(最大流,裂点,二分答案)
题意:一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲. 有一些男孩女孩相互喜欢,而其他相互不喜欢(不会“单向喜欢”). ...
随机推荐
- Thread类的interrupted方法和isInterrupted方法的区别
如下所示,interrupted()会改变线程的中断状态(清除),而isInterrupted()不影响线程的中断状态 /** * Tests whether the current thread ...
- Django 配置文件 settings.py
1. dubug配置 DEBUG=False 2. 数据库配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', &qu ...
- 第一篇 Springboot + Web MVC + MyBatis + 简单UI + Thymeleaf实现
源码链接:https://pan.baidu.com/s/1-LtF56dnCM277v5lILRM7g 提取码:c374 第二篇 Springboot mybatis generate根据数据库表自 ...
- php/phpmyadmin新手式环境搭建
之前就在折腾 zabbix 的时候遇到一个情况, 安装 php6 的时候各种库丢失, 最重要的 gd 经常跑路 只是无意中遇到了一种小方式, 现在已经迷糊了, 前天因为在部署 phpAdmin 的时候 ...
- Executor 任务执行器
Executor: 是一个接口 用于执行提交的任务 解耦任务提交和执行(线程的创建及调度) Executor的实现可以根据实际需求延展不同的逻辑:1. 对于提交的任务同步或者异步执行,如下同步执行: ...
- linux中的链接命令
ln 解释 命令名称:ln 命令英文原意:link 命令所在路径:/bin/ln 执行权限:所有用户 功能描述:生成链接文件 语法 ln -s [源文件] [目标文件] -s 创建软链接 示例 # 创 ...
- transition 过渡的兼容性处理
transition兼容性: 封装一个js来验证浏览器是否兼容transition,以及选择兼容的写法 以下是transition.js (function(){ //判断transition属性是否 ...
- uniapp简易直播
实验准备 在服务器部署nginx-rtmp作为我们直播推流和拉流的服务器(如果服务商选择七牛,也是直接给地址推流).为了加快部署,我在这一步使用Docker. docker pull tiangolo ...
- [红日安全]Web安全Day2 - XSS跨站实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- <packaging>pom</packaging>是什么意思
<packaging>pom</packaging>是什么意思? 答: 以下配置<packaging>pom</packaging>的意思是使用mave ...