博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1305 CQOI2009 dance跳舞 二分答案+最大流
阅读量:5200 次
发布时间:2019-06-13

本文共 2010 字,大约阅读时间需要 6 分钟。

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

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

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

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

#include
#include
#include
#include
#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
>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<
<

转载于:https://www.cnblogs.com/bhlsheji/p/5202232.html

你可能感兴趣的文章
(string)与ToString()的区别
查看>>
BS调用本地应用程序的步骤
查看>>
VS2019 高级保存
查看>>
数据库表字段命名规范
查看>>
IdentityServer4 DiscoveryClient找不到
查看>>
五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)
查看>>
asp.net core 配置文件中文读取乱码
查看>>
sprintgboot+springsecurity的跨域问题,
查看>>
js控制电池
查看>>
常用到的多种锁(随时可能修改)
查看>>
页面元素超长检验:输入下面的代码到浏览器地址栏即可
查看>>
doc.documentElement.scrollTop&&doc.body.scrollTop
查看>>
关于Keil uVision3与Keil uVision4同时安装的几个问题
查看>>
了解计算机的硬件发展
查看>>
C# 表达式与运算符(转)
查看>>
消息循环
查看>>
用UL标签+CSS实现的柱状图
查看>>
Linux 终端命令大全
查看>>
double 四舍五入三位
查看>>
js:语言精髓笔记3----语句
查看>>