博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
P3153 [CQOI2009]跳舞
阅读量:7124 次
发布时间:2019-06-28

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

考虑二分答案

把男女生都拆点,拆成喜欢和不喜欢
\(S\)向男生喜欢连边,容量\(mid\),男生喜欢向不喜欢连边,容量\(k\),女生同理
然后男生喜欢向女生喜欢连边,男生不喜欢向女生不喜欢连边
然后跑一遍最大流看是否满流即可

//minamoto#include
#define inf 0x3f3f3f3f#define R register#define fp(i,a,b) for(R int i=a,I=b+1;i
I;--i)#define go(u) for(R int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)#define gg(u) for(R int &i=cur[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)using namespace std;const int N=1005,M=100005;struct eg{int v,nx,w;}e[M];int head[N],tot=1;inline void add(R int u,R int v,R int w){ e[++tot]={v,head[u],w},head[u]=tot; e[++tot]={u,head[v],0},head[v]=tot;}int n,dep[N],cur[N],S,T,q[N],hh[N],res,k,h,t,l,r,mid,ans;char s[N];bool bfs(){ fp(i,S,T)cur[i]=head[i],dep[i]=-1; q[h=t=1]=S,dep[S]=0; while(h<=t){ int u=q[h++]; go(u)if(e[i].w&&dep[v]<0){ dep[v]=dep[u]+1,q[++t]=v; if(v==T)return true; } }return false;}int dfs(int u,int lim){ if(u==T||!lim)return lim; int flow=0,f; gg(u)if(dep[v]==dep[u]+1&&(f=dfs(v,min(lim,e[i].w)))){ flow+=f,lim-=f; e[i].w-=f,e[i^1].w+=f; if(!lim)break; }return flow;}int dinic(){int flow=0;while(bfs())flow+=dfs(S,inf);return flow;}bool check(){ fp(i,S,T)head[i]=hh[i];tot=res;for(R int i=2;i<=tot;i+=2)e[i].w+=e[i^1].w,e[i^1].w=0; fp(i,1,n)add(S,i,mid);fp(i,1,n)add(i+2*n,T,mid); return dinic()==mid*n;}int main(){// freopen("testdata.in","r",stdin); scanf("%d%d",&n,&k),S=0,T=4*n+1; fp(i,1,n){ scanf("%s",s+1); fp(j,1,n)s[j]=='Y'?add(i,j+2*n,1):add(i+n,j+3*n,1); }if(k){ fp(i,1,n)add(i,i+n,k);fp(i,1,n)add(i+3*n,i+2*n,k); }fp(i,S,T)hh[i]=head[i];res=tot; l=0,r=n; while(l<=r){ mid=(l+r)>>1; check()?(ans=mid,l=mid+1):(r=mid-1); }printf("%d\n",ans);return 0;}

转载于:https://www.cnblogs.com/bztMinamoto/p/10070300.html

你可能感兴趣的文章
SQL语句学习之路10
查看>>
[用事实说明两个凡是]一个mysql莫名锁表的问题
查看>>
ubuntu设置静态IP
查看>>
hql select from与from 的区别
查看>>
wxPython之Socket客户端
查看>>
linux系统目录结构详解(简单易懂)
查看>>
学习《Effective C++》
查看>>
CS224n笔记9 机器翻译和高级LSTM及GRU
查看>>
KVM虚拟机
查看>>
GdiPlus[57]: 图像(九) IGPBitmap 特有的属性与方法
查看>>
Windows 多媒体函数(winmm.dll 中的函数)汇总
查看>>
关于 Delphi 中流的使用(4) 遍历读取流中的所有数据
查看>>
使用 IntraWeb (4) - 页面布局之 TIWRegion
查看>>
域控的升级及客户端加入域
查看>>
【Java每日一题】20161129
查看>>
[译文]greenlet:轻量级并发程序
查看>>
五分钟学会HTML
查看>>
请求Servlet 得到 Request 里所有对象
查看>>
volatile 和 synchronized 的比较
查看>>
Java递归
查看>>