题目大意:给定n个男生和n个女生,一些互相喜欢而一些不。举行几次舞会,每次舞会要配成n对。不能有同样的组合出现。每一个人仅仅能与不喜欢的人跳k次舞,求最多举行几次舞会

将一个人拆成两个点。点1向点2连一条流量为k的边。两个人若互相喜欢则点1之间连边,不喜欢则点2之间连边

对于每个要验证的x值 将每个人的点1向源或汇连一条流量为x的边

然后二分答案跑最大流就可以

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define M 220
#define INF 0x3f3f3f3f
#define S 0
#define T (n<<2|1)
using namespace std;
struct abcd{
int to,f,next;
}table[100100];
int head[M],tot=1;
int n,k;
char s[M];
int dpt[M];
bool BFS()
{
static int q[M],r,h;
int i;
memset(dpt,-1,sizeof dpt);
r=h=0;q[++r]=S;dpt[S]=1;
while(r!=h)
{
int x=q[++h];
for(i=head[x];i;i=table[i].next)
if(table[i].f&&!~dpt[table[i].to])
{
dpt[table[i].to]=dpt[x]+1;
q[++r]=table[i].to;
if(table[i].to==T)
return true;
}
}
return false;
}
int Dinic(int x,int flow)
{
int i,left=flow;
if(x==T) return flow;
for(i=head[x];i&&left;i=table[i].next)
if(table[i].f&&dpt[table[i].to]==dpt[x]+1)
{
int temp=Dinic(table[i].to, min(left,table[i].f) );
if(!temp) dpt[table[i].to]=-1;
left-=temp;
table[i].f-=temp;
table[i^1].f+=temp;
}
return flow-left;
}
inline void Add(int x,int y,int z)
{
table[++tot].to=y;
table[tot].f=z;
table[tot].next=head[x];
head[x]=tot;
}
inline void Link(int x,int y,int z)
{
Add(x,y,z);
Add(y,x,0);
}
inline void Restore()
{
int i;
for(i=2;i<=tot;i+=2)
table[i].f+=table[i^1].f,table[i^1].f=0;
}
bool Judge(int x)
{
int i;
Restore();
for(i=tot-(n<<2)+1;i<=tot;i+=2)
table[i].f=x;
int ans=0;
while( BFS() )
ans+=Dinic(S,INF);
return ans==n*x;
}
int Bisection()
{
int l=0,r=n;
while(l+1<r)
{
int mid=l+r>>1;
if( Judge(mid) )
l=mid;
else
r=mid;
}
if( Judge(r) )
return r;
return l;
}
int main()
{
int i,j;
cin>>n>>k;
for(i=1;i<=n;i++)
{
Link(i,n+i,k);
Link(n+n+i,n+n+n+i,k);
}
for(i=1;i<=n;i++)
{
scanf("%s",s+1);
for(j=1;j<=n;j++)
{
if(s[j]=='Y')
Link(i,n+n+n+j,1);
else
Link(n+i,n+n+j,1);
}
}
for(i=1;i<=n;i++)
{
Link(S,i,0);
Link(n+n+n+i,T,0);
}
cout<<Bisection()<<endl;
}
//0 源点
//1~n 男性第一个点
//n+1~2n 男性第二个点
//2n+1~3n 女性第二个点
//3n+1~4n 女性第一个点
//4n+1 汇点

BZOJ 1305 CQOI2009 dance跳舞 二分答案+最大流的更多相关文章

  1. BZOJ 1305: [CQOI2009]dance跳舞 二分+最大流

    1305: [CQOI2009]dance跳舞 Description 一次舞会有n个男孩和n个女孩.每首曲子开始时,所有男孩和女孩恰好配成n对跳交谊舞.每个男孩都不会和同一个女孩跳两首(或更多)舞曲 ...

  2. bzoj 1305: [CQOI2009]dance跳舞

    题目链接 bzoj 1305: [CQOI2009]dance跳舞 题解 男,女生拆点A1A2,B1B2,拆成两点间分别连容量为K的边,限制与不喜欢的人跳舞的数量 A1连接源点容量为x,B1连接汇点容 ...

  3. BZOJ 1305: [CQOI2009]dance跳舞( 最大流 )

    云神代码很短...0 ms过的...看了代码 , 大概是贪心... orz 我不会证 数据这么小乱搞就可以了吧... ←_← 这道题网络流还是可以写的... 既然限制了最多只能和 k 个不喜欢的人da ...

  4. BZOJ 1305: [CQOI2009]dance跳舞 网络最大流_二分答案_建模

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

  5. BZOJ 1305 [CQOI2009]dance跳舞(二分+网络流)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1305 [题目大意] 一次舞会有n个男孩和n个女孩. 每首曲子开始时,所有男孩和女孩恰好 ...

  6. bzoj 1305: [CQOI2009]dance 二分+網絡流判定

    1305: [CQOI2009]dance跳舞 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1340  Solved: 581[Submit][Sta ...

  7. 1305: [CQOI2009]dance跳舞 - BZOJ

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

  8. BZOJ 1305:dance跳舞(二分+最大流)

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

  9. 1305: [CQOI2009]dance跳舞

    Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 4169  Solved: 1804[Submit][Status][Discuss] Descripti ...

随机推荐

  1. 腾讯QQ是用什么语言开发的(转)

    腾讯QQ的部分COM组件用的VC6,用exescope看其中几个dll的依赖,依赖于MFC42.dll,MSVCRT.dll,MSVCP60.dll都说明是VC6写的. 还有一部分用的VS2005,包 ...

  2. Windows Azure 社区新闻综述(#75 版)

    欢迎查看最新版本的每周综述,其中包含有关云计算和 Windows Azure 的社区推动新闻.内容和对话.以下是本周的亮点. 文章.视频和博客文章 ·   PowerShell 对 Windows A ...

  3. bootstrap框架开发电子商城案例

    bootstrap框架开发电子商城案例 玛图 bootstrap 商城框架

  4. CodeForces 525C Ilya and Sticks 贪心

    题目:click here #include <iostream> #include <cstdio> #include <cstring> #include &l ...

  5. ACE编译

    (1)下载ACE6.1.0版本,路径如下 http://download.dre.vanderbilt.edu/previous_versions/ACE-6.1.0.tar.gz

  6. Uniconnection 连 mysql 有时会断线的

    你定义localfailover:=ture.断线后会自己接上  firedac没这种功能.只有unidac有

  7. cglib源码学习交流

    背景 前段时间在工作中,包括一些代码阅读过程中,spring aop经常性的会看到cglib中的相关内容,包括BeanCopier,BulkBean,Enancher等内容,以前虽大致知道一些内容,原 ...

  8. C#委托好处知多少

    1.性能 性能是泛型的一个主要优点. 直接上例子,通过实例可以让我们很好的理解这一点. Stopwatch stopwatch = new Stopwatch(); stopwatch.Start() ...

  9. 【Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色】玛萨玛索男装网购商城

    [Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款/蓝绿色]玛萨玛索男装网购商城 [特价商品] Dior风格/舒适防风面料/抗静电里衬/大身撞色拼接/精致平驳领/时尚便西款 ...

  10. hdu-4302-Holedox Eating-线段树-单点更新,有策略的单点查询

    一開始实在是不知道怎么做,后来经过指导,猛然发现,仅仅须要记录某个区间内是否有值就可以. flag[i]:代表i区间内,共同拥有的蛋糕数量. 放置蛋糕的时候非常好操作,单点更新. ip:老鼠当前的位置 ...