题目描述

传送门

题解

判断JOING!的条件是显然的:如果行或列的总点数减去障碍数还不够li或ci的话,肯定无解。
我的建图比较奇怪。
三排点,分别为每一行,每个点,每一列。
s->每一行,li
每一列->t,ci
每一行->当前行中的点,1
每个点->所在的列,1
注意这里的点必须不是障碍点。
最大流即为答案。

贴上hzwer的题解:
此题的思路是先放满棋盘,然后考虑最多可以删多少个。。。
某一行和某一列的可以放的格子数小于需求就直接jiong掉
然后从源向每一行连边,流量为可以放的格子数 - 需求的格子数(也就是可以删多少格子)
从每一列向汇,同上.
从每一个非障碍的格子的行向列连边流量为1
跑一遍最大流即可ans=可放格子数-maxflow

咦怎么感觉他的更科学。。。

代码

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;const int max_n=105;
const int max_m=105;
const int max_N=max_n+max_m+max_n*max_m;
const int max_M=max_n+max_m+max_n*max_m*2;
const int max_e=max_M*2;
const int INF=1e9;int n,m,k,x,y,a[max_n][max_m];
int l[max_n],c[max_m];
int tot,point[max_N],next[max_e],v[max_e],remain[max_e];
int deep[max_N],cur[max_N];
int N,now,maxflow;
queue <int> q;inline void addedge(int x,int y,int cap){
//  cout<<x<<" "<<y<<endl;++tot; next[tot]=point[x]; point[x]=tot; v[tot]=y; remain[tot]=cap;++tot; next[tot]=point[y]; point[y]=tot; v[tot]=x; remain[tot]=0;
}
inline bool bfs(int s,int t){memset(deep,0x7f,sizeof(deep));deep[s]=0;for (int i=1;i<=N;++i) cur[i]=point[i];while (!q.empty()) q.pop();q.push(s);while (!q.empty()){int now=q.front(); q.pop();for (int i=point[now];i!=-1;i=next[i])if (deep[v[i]]>INF&&remain[i]){deep[v[i]]=deep[now]+1;q.push(v[i]);}}return deep[t]<INF;
}
inline int dfs(int now,int t,int limit){if (now==t||!limit) return limit;int flow=0,f;for (int i=cur[now];i!=-1;i=next[i]){cur[now]=i;if (deep[v[i]]==deep[now]+1&&(f=dfs(v[i],t,min(limit,remain[i])))){flow+=f;limit-=f;remain[i]-=f;remain[i^1]+=f;if (!limit) break;}}return flow;
}
inline void dinic(int s,int t){while (bfs(s,t))maxflow+=dfs(s,t,INF);
}int main(){tot=-1;memset(point,-1,sizeof(point));memset(next,-1,sizeof(next));scanf("%d%d%d",&n,&m,&k);N=n+m+n*m+2;for (int i=1;i<=n;++i) scanf("%d",&l[i]),addedge(1,1+i,l[i]);for (int i=1;i<=m;++i) scanf("%d",&c[i]),addedge(1+n+i,N,c[i]);for (int i=1;i<=k;++i){scanf("%d%d",&x,&y);++l[x]; ++c[y];if (l[x]>m||c[y]>n){printf("JIONG!\n");return 0;}a[x][y]=1;}for (int i=1;i<=n;++i)for (int j=1;j<=m;++j)if (!a[i][j]){now=(i-1)*m+j;addedge(1+i,1+n+m+now,1);addedge(1+n+m+now,1+n+j,1);}dinic(1,N);printf("%d\n",maxflow);
}

[BZOJ1458]士兵占领(最大流)相关推荐

  1. 【BZOJ-1458】士兵占领 最大流

    1458: 士兵占领 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 782  Solved: 456 [Submit][Status][Discuss ...

  2. bzoj1458 士兵占据

    1458: 士兵占据 Time Limit: 10 Sec  Memory Limit: 64 MB Submit: 685  Solved: 398 [Submit][Status][Discuss ...

  3. 天天向上python题目答案_python语言程序设计基础 习题 天天向上的力量(math.pow)...

    实例1: 一年365天,,以第一天的能力值为基数1.0,当好好学习时能力值相比前一天提高1%,没有学习时能力值相比前天要降低1%,每天努力和每天放任,一年下来的能力值相差多少? 解析: 如果每天都好好 ...

  4. BZOJ ac100题存档

    不知不觉AC100题了,放眼望去好像都是水题.在这里就做一个存档吧(特别感谢各位大神尤其是云神http://hi.baidu.com/greencloud和丽洁姐http://wjmzbmr.com/ ...

  5. 有趣题目和认知合集(持续更新)

    写写对一些算法的理解,挂几个有意思的题,可能也会挂几个板子题 算法理解偏向于能懂即可,没有严格的证明 快乐几何 [1.2]Volatile Kite 点到直线 快乐搜与暴力 [2.4]Short Co ...

  6. [补档]2017-7-29 大佬讲课笔记

    网络流 虽然dalao声音不大,但是很好听呢.不过dalao很快的进入正经主题了呢. 基本定义 1. 有n个点,m条有向边,其中源点 s 只有出边,没有入边.汇点 t 只有入边,没有出边. 2. 每条 ...

  7. [NetworkFlow]网络流建模相关

    流 网络流问题本质上是线性规划问题的应用之一,线性规划问题的标准形式是给出一组等式约束和不等式约束,要求最优化一个线性函数. 在流问题中,变量以流量的形式出现在问题中,我们给出一个流网络(以有向图的形 ...

  8. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  9. 2019暑假起集训实录

    欢迎 2019暑假集训实录 7.6 Codeforces #Round572补题,UVA820最大流,UVA12093树形dp,完成POJ1077优先队列bfs(A*),完成HDU1667-The R ...

最新文章

  1. C语言实现二进制文件读写
  2. 查询oracle中所有用户信息
  3. 《程序员代码面试指南第二版》Python实现(个人读书笔记)
  4. 打印机打印网页不清晰_打印机墨水:你不知道的秘密
  5. .在OnPaint()函数和在OnEraseBkgnd()重绘图的区别
  6. InnoDB的行锁和表锁
  7. Canvas API初步学习
  8. 如何解决 Angular custom library module 在 ng build 时无法被识别的错误
  9. Docker和Kubernetes如何让DevOps更具效力
  10. Linux环境下查看网络性能的基本命令
  11. Machine Learning In Action 第二章学习笔记: kNN算法
  12. eclipse 启动服务后,部署的文件一直是旧的文件的原因分析
  13. 2021四川高考成绩等位分查询,四川省教育考试院:2021年四川高考成绩查询入口、查分系统...
  14. vivado2021.2安装及验证教程(绝大部分适用于同软件其他版本)
  15. 屏幕录像专家使用手册
  16. 网络诊断显示服务器有问题,Win7系统网络诊断提示DNS服务器未响应怎么解决
  17. UML中的用例图、活动图、顺序图
  18. OLE程序开发利用(开发EXCEL)
  19. Navicat Premium和Navicat for MySQL哪个好用?
  20. Windows10关闭指定端口号命令

热门文章

  1. VOT2018总体性能以及各个算法的分析
  2. 北大林亦波:探索AI+EDA新路径 | 青源专栏
  3. IgH详解十四、igh添加总线链路状态监测功能
  4. aelf区块链开发指南(一) | 如何将以太坊合约转为aelf合约?
  5. 屁孩君儿子讲解 1090:含k个3的数
  6. 计算机辅助技术的英文,计算机辅助技术,computer aided technology,音标,读音,翻译,英文例句,英语词典...
  7. checklistbox使用详解
  8. DSA之十大排序算法第二种:Straight Selection Sort
  9. Chrome插件之使用美图秀秀编辑图片
  10. JavaFX + MySQL 学校管理系统