BZOJ1412[ZJOI2009]狼和羊的故事——最小割
题目描述
输入
输出
- #include<cstdio>
- #include<algorithm>
- #include<iostream>
- #include<cstring>
- #include<cmath>
- #include<queue>
- using namespace std;
- int next[1000001];
- int to[1000001];
- int val[1000001];
- int head[1000001];
- int tot=1;
- int q[1000001];
- int s[120][120];
- int n,m;
- int S,T;
- int ans;
- int d[1000001];
- const int INF=0x3f3f3f3f;
- void add(int x,int y,int v)
- {
- tot++;
- next[tot]=head[x];
- head[x]=tot;
- to[tot]=y;
- val[tot]=v;
- tot++;
- next[tot]=head[y];
- head[y]=tot;
- to[tot]=x;
- val[tot]=0;
- }
- bool bfs(int S,int T)
- {
- int r=0;
- int l=0;
- memset(d,-1,sizeof(d));
- q[r++]=S;
- d[S]=0;
- while(l<r)
- {
- int now=q[l];
- for(int i=head[now];i;i=next[i])
- {
- if(d[to[i]]==-1&&val[i]!=0)
- {
- d[to[i]]=d[now]+1;
- q[r++]=to[i];
- }
- }
- l++;
- }
- if(d[T]==-1)
- {
- return false;
- }
- else
- {
- return true;
- }
- }
- int dfs(int x,int flow)
- {
- if(x==T)
- {
- return flow;
- }
- int now_flow;
- int used=0;
- for(int i=head[x];i;i=next[i])
- {
- if(d[to[i]]==d[x]+1&&val[i]!=0)
- {
- now_flow=dfs(to[i],min(flow-used,val[i]));
- val[i]-=now_flow;
- val[i^1]+=now_flow;
- used+=now_flow;
- if(now_flow==flow)
- {
- return flow;
- }
- }
- }
- if(used==0)
- {
- d[x]=-1;
- }
- return used;
- }
- void dinic()
- {
- while(bfs(S,T)==true)
- {
- ans+=dfs(S,INF);
- }
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- S=n*m+1;
- T=n*m+2;
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- scanf("%d",&s[i][j]);
- if(s[i][j]==2)
- {
- add(m*(i-1)+j,T,INF);
- }
- else if(s[i][j]==1)
- {
- add(S,m*(i-1)+j,INF);
- }
- }
- }
- for(int i=1;i<=n;i++)
- {
- for(int j=1;j<=m;j++)
- {
- int x=(i-1)*m+j;
- if(s[i][j]==1||s[i][j]==0)
- {
- if(i-1>=1&&(s[i-1][j]==2||s[i-1][j]==0))
- {
- add(x,m*(i-2)+j,1);
- }
- if(j-1>=1&&(s[i][j-1]==2||s[i][j-1]==0))
- {
- add(x,m*(i-1)+j-1,1);
- }
- if(i+1<=n&&(s[i+1][j]==2||s[i+1][j]==0))
- {
- add(x,m*i+j,1);
- }
- if(j+1<=m&&(s[i][j+1]==2||s[i][j+1]==0))
- {
- add(x,m*(i-1)+j+1,1);
- }
- }
- }
- }
- dinic();
- printf("%d",ans);
- return 0;
- }
BZOJ1412[ZJOI2009]狼和羊的故事——最小割的更多相关文章
- 【BZOJ1412】[ZJOI2009]狼和羊的故事 最小割
[BZOJ1412][ZJOI2009]狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想: ...
- BZOJ 1412: [ZJOI2009]狼和羊的故事( 最小割 )
显然是最小割...把狼的领地连S, 羊的领地连T, 然后中间再连边, 跑最大流就OK了 -------------------------------------------------------- ...
- P2598 [ZJOI2009]狼和羊的故事(最小割)
P2598 [ZJOI2009]狼和羊的故事 说真的,要多练练网络流的题了,这么简单的网络流就看不出来... 题目要求我们要求将狼和羊分开,也就是最小割,(等等什么逻辑...头大....) 我们这样想 ...
- [ZJOI2009] 狼与羊的故事 - 最小割
给定一个\(N \times M\)方格矩阵,每个格子可在\(0,1,2\)中取值.要求在方格的边上进行划分,使得任意联通块内不同时包含\(1\)和\(2\)的格子. ________________ ...
- BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】
BZOJ1412 ZJOI2009 狼和羊的故事 Description “狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......” Orez听到这首歌,心想:狼和 ...
- BZOJ1412 [ZJOI2009]狼和羊的故事 【最小割】
1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 3454 Solved: 1733 [Submit][ ...
- bzoj1412: [ZJOI2009]狼和羊的故事
空地之间开始没有连然后一直WA...题意混乱...尴尬. #include<cstdio> #include<cstring> #include<iostream> ...
- LG2598/BZOJ1412 「ZJOI2009」狼和羊的故事 最小割
问题描述 LG2598 BZOJ1412 题解 看到要把狼和羊两个物种分开 自然想到最小割. 发现\((x,y)\)可以向上下左右走以获得贡献,所以建边:\((x,y),(x-1,y)\),\((x, ...
- bzoj1412: [ZJOI2009]狼和羊的故事(最小割)
传送门 首先,考虑只有狼和羊怎么办.我们把源点向所有羊连边,容$inf$,所有狼向汇点连边,容$inf$,然后羊向周围所有的狼连边,容$1$.那么,只要求一个割就能把狼和羊给分开,求一个最小割就是答案 ...
随机推荐
- React-菜鸟学习笔记(一)
新公司的项目前端架构用的是react.js 之前孤陋寡闻并没听说过,想着后期开发和维护多少要会点前端的东西,就简单研究一下.个人的学习习惯能写代码的就不写文字,必要的地方加两行注释,代码一行行敲下去, ...
- Windows 10 配置Linux及安装Docker
https://baijiahao.baidu.com/s?id=1607159570058814753&wfr=spider&for=pc https://blog.csdn.net ...
- Mysql:is not allowed to connect to this MySQL server
连接mysql的时候发生这个错误:ERROR 1130: Host '192.168.1.110' is not allowed to connect to this MySQL server 解决方 ...
- CF892.B. Wrath
---恢复内容开始--- 题意: 有n个犯人,手上都有个长度为Li的武器,当铃响时大家同时挥动武器,只能把前面攻击范围内的敌人杀死,问最后还剩几个人. 题目传送门: [http://codeforce ...
- echarts使用笔记五:echarts的Zoom控件
option = { title: { text: '趋势' }, tooltip : { trigger: 'axis', show:true, axisPointer : { // 坐标轴指示器, ...
- Codeforces Round #546 (Div. 2)
http://codeforces.com/contest/1136 A #include <bits/stdc++.h> using namespace std; ; int N, K; ...
- Nginx三部曲(2)性能
我们会告诉你 Nginx 如何工作及其背后的理念,还有如何优化以加快应用的性能,如何安装启动和保持运行. 这个教程有三个部分: 基本概念 —— 这部分需要去了解 Nginx 的一些指令和使用场景,继承 ...
- react初入门
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Tomcat异常及解决办法——持续更新中
公司项目,开发语言为java,中间件为Tomcat,运行过程中,从Tomcat出现了一些异常,现将异常及解决办法记录如下,仅供参考.(不断在补充中.......) 异常一: 1.日志内容 org.ap ...
- Mybatis+Spring整合后Mapper测试类编写
public class UserMapperTest { private ApplicationContext applicationContext; @Before public void ini ...