bzoj1305: [CQOI2009]dance跳舞(二分答案+网络流)
1305: [CQOI2009]dance跳舞
题目:传送门
题解:
一眼网络流基础建模...然后就GG了
二分答案+拆点建边+最大流判断:
把男女生拆为男1,男2,女1,女2
1、男1和男2还有女1和女2之间连边,流量为约束条件k
2、st连男1,女2连ed,流量为二分的mid
3、如果男生i喜欢女生j,就将男1与女2相连(不在约束条件内)
4、如果不喜欢,就将男2与女1相连(在约束条件内)
代码:
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
char ss[][];
struct node
{
int x,y,c,next,other;
}a[];int len,last[];
int st,ed,head,tail,n,k;
void ins(int x,int y,int c)
{
int k1,k2;
k1=++len;
a[len].x=x;a[len].y=y;a[len].c=c;
a[len].next=last[x];last[x]=len; k2=++len;
a[len].x=y;a[len].y=x;a[len].c=;
a[len].next=last[y];last[y]=len; a[k1].other=k2;
a[k2].other=k1;
}
int h[],list[];
bool bt_h()
{
memset(h,,sizeof(h));h[st]=;
head=;tail=;list[]=st;
while(head!=tail)
{
int x=list[head];
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]== && a[k].c)
{
h[y]=h[x]+;
list[tail++]=y;
}
}
head++;
}
if(h[ed])return true;
return false;
}
int find_flow(int x,int flow)
{
if(x==ed)return flow;
int t,s=;
for(int k=last[x];k;k=a[k].next)
{
int y=a[k].y;
if(h[y]==(h[x]+) && a[k].c && s<flow)
{
s+=t=find_flow(y,min(a[k].c,flow-s));
a[k].c-=t;a[a[k].other].c+=t;
}
}
if(s==)h[x]=;
return s;
}
int mid,l,r;
int s1[],s2[];
void build(int cc)
{
len=;memset(last,,sizeof(last));
st=*n+;ed=st+;
for(int i=;i<=n;i++)ins(st,i,cc);
for(int i=;i<=n;i++)ins(i+n*,ed,cc);
for(int i=;i<=n;i++)ins(i,i+*n,k);
for(int i=;i<=n;i++)ins(i+n,i+n*,k);
/*for(int i=1;i<=n;i++)
{
ins(st,i,cc);
ins(i,i+n*2,s1[i]+k);//男1-->男2
}
for(int j=1;j<=n;j++)
{
ins(j+n*3,ed,cc);
ins(j+n,j+n*3,s2[j]+k);//女1-->女2
}*/
for(int i=;i<=n;i++)//男2-->女1
for(int j=;j<=n;j++)
{
if(ss[i][j]=='Y')ins(i,j+n*,);
else ins(i+n*,j+n,);
}
}
bool check(int cnt)
{
build(cnt);
int ans=;
while(bt_h())
ans+=find_flow(st,);
if(ans==n*cnt)return true;
return false;
}
int main()
{
scanf("%d%d",&n,&k);
for(int i=;i<=n;i++)scanf("%s",ss[i]+);
l=;r=n;int sum=;
while(l<=r)
{
mid=(l+r)/;
if(check(mid))
{
l=mid+;
sum=mid;
}
else r=mid-;
}
printf("%d\n",sum);
return ;
}
bzoj1305: [CQOI2009]dance跳舞(二分答案+网络流)的更多相关文章
- BZOJ 1305 CQOI2009 dance跳舞 二分答案+最大流
题目大意:给定n个男生和n个女生,一些互相喜欢而一些不.举行几次舞会,每次舞会要配成n对.不能有同样的组合出现.每一个人仅仅能与不喜欢的人跳k次舞,求最多举行几次舞会 将一个人拆成两个点.点1向点2连 ...
- BZOJ1305 [CQOI2009]dance跳舞 【网络流】
1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec Memory Limit: 162 MB Submit: 3714 Solved: 1572 [Submit][ ...
- BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流
1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...
- bzoj千题计划130:bzoj1305: [CQOI2009]dance跳舞
http://www.lydsy.com/JudgeOnline/problem.php?id=1305 每个人拆为喜欢(yes)和不喜欢(no)两个点 二分答案 1.每两个人之间只能跳一次 喜欢则 ...
- Bzoj1305 [CQOI2009]dance跳舞
Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2925 Solved: 1221 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时 ...
- 【二分答案】【最大流】bzoj1305 [CQOI2009]dance跳舞
http://hzwer.com/1986.html #include<cstdio> #include<algorithm> #include<queue> #i ...
- 并不对劲的bzoj1305: [CQOI2009]dance跳舞
传送门-> 又是陈年老坑. 听上去不知道从何下[手]?那要是把题目换成“判断这些人能否条x支舞”呢? 这样就变成了一个网络流可以解决的问题,只要把每个人拆成喜欢和不喜欢两点,每个人两点总流量不超 ...
- [CQOI2009]dance跳舞(最大流+二分)
[CQOI2009]dance跳舞 每个人拆成$2$个点,表示是否与喜欢的人跳舞 跳$m$首舞曲时,满足最大流为$n*m$ 二分$m$,跑最大流即可 #include<cstdio> #i ...
- BZOJ 1305: [CQOI2009]dance跳舞( 最大流 )
云神代码很短...0 ms过的...看了代码 , 大概是贪心... orz 我不会证 数据这么小乱搞就可以了吧... ←_← 这道题网络流还是可以写的... 既然限制了最多只能和 k 个不喜欢的人da ...
随机推荐
- 用select拼接insert into,单引号转义
SELECT 'INSERT INTO dbo.CMS_Transformation ( TransformationName , TransformationCode , Transformatio ...
- Python学习历程之面对对象浅识
# ===============================封装====================================# class Bar:# def __init__(se ...
- java实现简单回文算法
算法要求 编写一个程序,判断一个字符串是否为"回文".回文串:字符串字符从前往后与从后往前一致(中心对称). 算法思路 首先将字符串等分左右两块,然后依次对称比较每一对字符是否相同 ...
- 关于C语言中EOF的一点认识
总结来说:EOF(即End Of File)是一个文件结束的标记,当文件被读取到EOF位置时,参与读取的函数会返回整型值 -1,这时要注意的是:这个值被赋值给有符号char类型时是0xff,被赋值给有 ...
- 什么是 Dropout
为了应对神经网络很容易过拟合的问题,2014年 Hinton 提出了一个神器, **Dropout: A Simple Way to Prevent Neural Networks from Over ...
- (转载)Android项目实战(二十八):Zxing二维码实现及优化
Android项目实战(二十八):Zxing二维码实现及优化 前言: 多年之前接触过zxing实现二维码,没想到今日项目中再此使用竟然使用的还是zxing,百度之,竟是如此牛的玩意. 当然,项目中 ...
- CodeIgniter 相关资源
CodeIgniter ci 如果需要扩展多个base Controller,譬如一个 core/MY_Controller表示基本Controller,一个 core/MY_AuthControl ...
- JQurey大纲
- Java通过UUID随机生成36位、32位唯一识别码(唯一字符串)
import java.util.UUID; /** * 通过UUID随机生成36位.32位唯一识别码(唯一字符串) * @author [J.H] * */ public class Test { ...
- These relative modules were not found:...{"sourceM ap":false} 报错解决
今天在使用vue2.0 + webpack 时,没有动过任何配置文件,也没更新依赖,但是报下面的错误: These relative modules were not found: * ./star1 ...