思路:

建图我根本没有想到啊…….

(我是不会告诉你我借鉴了一下题解的思路)

把每个人拆成喜欢的和不喜欢的点

男 喜欢 向 男 不喜欢 连 边权为k的边

如果男喜欢女 那么 男喜欢向 女喜欢 连 1

如果男 不喜欢女 那么 男不喜欢 向 女不喜欢 连1

男 喜欢 向 男不喜欢 连k

女 不喜欢 向 女喜欢 连k

源点 向 男喜欢 连 二分的那个值

女喜欢 向汇点 连 二分的那个值

最后判断一下 总流量 是不是等于 n*二分的那个值

嗯 大概就酱~

//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define N 10005
int n,k,ed=6666,answer;
char a[55][55];
struct Dinic{
int first[N],next[N],v[N],w[N],tot,vis[N];
void add(int x,int y,int z){Add(x,y,z),Add(y,x,0);}
void Add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
bool insert(int num){
memset(first,-1,sizeof(first)),tot=0;
for(int i=1;i<=n;i++)add(0,i,num);
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(a[i][j]=='Y')add(i,j+n,1);
else add(i+2*n,j+3*n,1);
}
for(int i=1;i<=n;i++)add(i,i+2*n,k),add(i+3*n,i+n,k),add(i+n,6666,num);
return flow()==num*n;
}
bool tell(){
memset(vis,-1,sizeof(vis));vis[0]=0;
queue<int>q;q.push(0);
while(!q.empty()){
int t=q.front();q.pop();
for(int i=first[t];~i;i=next[i])
if(vis[v[i]]==-1&&w[i])
vis[v[i]]=vis[t]+1,q.push(v[i]);
}
return vis[ed]!=-1;
}
int zeng(int x,int y){
if(x==ed)return y;
int r=0;
for(int i=first[x];y>r&&~i;i=next[i])
if(w[i]&&vis[v[i]]==vis[x]+1){
int t=zeng(v[i],min(y-r,w[i]));
w[i]-=t,w[i^1]+=t,r+=t;
}
if(!y)vis[x]=-1;
return r;
}
int flow(){
int ans=0,jy;
while(tell())while(jy=zeng(0,0x3fffff))ans+=jy;
return ans;
}
}dinic;
int main(){
scanf("%d%d",&n,&k);
for(int i=1;i<=n;i++)scanf("%s",a[i]+1);
int l=0,r=50;
while(l<=r){
int mid=(l+r)>>1;
if(dinic.insert(mid))answer=mid,l=mid+1;
else r=mid-1;
}
printf("%d\n",answer);
}

BZOJ 1305 二分+网络流的更多相关文章

  1. bzoj 1305 二分+最大流判定|贪心

    首先我们二分一个答案mid,在判定是否能举办mid次,那么对于每个次我们可以用最大流根据是否满流(流量为n*mid)来判定,对于每个点我们拆成两个点,分别表示这个人要和他喜欢和不喜欢的人一起跳舞,那么 ...

  2. BZOJ 3130 二分+网络流

    思路: 不被题目忽悠就是思路 二分一下max 判一下等不等于最大流 搞定 7 9 1 1 2 3 1 3 3 2 3 3 3 4 2 3 5 2 3 6 1 4 7 2 5 7 2 6 7 2 这里有 ...

  3. bzoj 1305: [CQOI2009]dance跳舞

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

  4. hihoCoder 1389 Sewage Treatment 【二分+网络流+优化】 (ACM-ICPC国际大学生程序设计竞赛北京赛区(2016)网络赛)

    #1389 : Sewage Treatment 时间限制:2000ms 单点时限:2000ms 内存限制:256MB 描述 After years of suffering, people coul ...

  5. POJ 2455 Secret Milking Machine(搜索-二分,网络流-最大流)

    Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9658   Accepted: ...

  6. BZOJ_3993_[SDOI2015]星际战争_二分+网络流

    BZOJ_3993_[SDOI2015]星际战争_二分+网络流 Description 3333年,在银河系的某星球上,X军团和Y军团正在激烈地作战.在战斗的某一阶段,Y军团一共派遣了N个巨型机器人进 ...

  7. 【bzoj3130】[Sdoi2013]费用流 二分+网络流最大流

    题目描述 Alice和Bob做游戏,给出一张有向图表示运输网络,Alice先给Bob一种最大流方案,然后Bob在所有边上分配总和等于P的非负费用.Alice希望总费用尽量小,而Bob希望总费用尽量大. ...

  8. 【bzoj1822】[JSOI2010]Frozen Nova 冷冻波 计算几何+二分+网络流最大流

    题目描述 WJJ喜欢“魔兽争霸”这个游戏.在游戏中,巫妖是一种强大的英雄,它的技能Frozen Nova每次可以杀死一个小精灵.我们认为,巫妖和小精灵都可以看成是平面上的点. 当巫妖和小精灵之间的直线 ...

  9. 【bzoj1733】[Usaco2005 feb]Secret Milking Machine 神秘的挤奶机 二分+网络流最大流

    题目描述 Farmer John is constructing a new milking machine and wishes to keep it secret as long as possi ...

随机推荐

  1. C指针思考-(1)

    首先记录下时间吧,@2016-08-18 23:26:22,这段时间看了同事的3本经典的书,<c缺陷和陷阱>,<c和指针>和<c专家编程>,感觉指针说的最多,多多少 ...

  2. c的面向对象思想记录

    在一家公司做实习生,努力学习,keep moving. //c1.h typedef struct { +]; int (*tr)(); } trans; //c1.c #include<str ...

  3. Linux学习总结(10)——Linux查看CPU和内存使用情况

    在系统维护的过程中,随时可能有需要查看 CPU 使用率,并根据相应信息分析系统状况的需要.在 CentOS 中,可以通过 top 命令来查看 CPU 使用状况.运行 top 命令后,CPU 使用状态会 ...

  4. 将shell脚本运行情况写入Rsyslog日志server

    在运维工作中,免不了编写一些脚本交由计划任务(cron)去定时运行完毕一些日常工作,实现运维工作自己主动化.比方在我的日常工作中备份数据是一项重要的工作,须要定时将数据备份到备份服器和一些其它的备份介 ...

  5. EBS OAF开发中怎样通过ReferenceAO进行验证

    EBS OAF开发中怎样通过ReferenceAO进行验证 (版权声明.本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) Reference AO 除了用于 ...

  6. css实现上下左右布局

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. hdu_3308 区间合并

    一两个月没写代码的确是手生的厉害,debug的好艰辛,,不过看到accept时的那种满足感真的就是爽 #include<iostream> #include<cstdio> # ...

  8. hdu_1394,线段树求逆序数

    http://www.notonlysuccess.com/index.php/segment-tree-complete/ #include<iostream> #include< ...

  9. Java JNI 入门篇——传递数组与修改数组

    这里不在重复JavaJNI 的开发过程了,不熟悉的同学请参考:Java JNI HelloWorld 直接上主要代码: ArrayJNI.Java package com.example.jni; p ...

  10. Session原理、安全以及最基本的Express和Redis实现

    Session原理.安全以及最基本的Express和Redis实现 https://segmentfault.com/a/1190000002630691