【链接】 我是链接,点我呀:)
【题意】

在这里输入题意

【题解】

每个点和相邻的4个点连一条容量为1的边。
然后源点和每头羊连容量INF的边
每头狼和汇点连容量INF的边。
这样求最小割的时候只会把栅栏删掉。
然后源点不能到汇点了。
显然就是每头羊都不能和狼联通了(否则肯定能有增广路

a数组一开始写成1万x1万。
(直接超时了。。

【代码】

#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define ms(x,y) memset(x,y,sizeof x)
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 10000;
const int INF = 10000+10;struct abc{int en,nex;LL flow;
};int n,m,s,t,cost[N+10],deep[N*2+20];
int fir[N+10],tfir[N+10],totm;
abc bian[2*N+2*N+N*8+10];
queue <int> dl;void add(int x,int y,LL cost){bian[totm].nex = fir[x];fir[x] = totm;bian[totm].en = y,bian[totm].flow = cost;totm++;bian[totm].nex = fir[y];fir[y] = totm;bian[totm].en = x,bian[totm].flow = 0;totm++;
}bool bfs(int s,int t){dl.push(s);ms(deep,255);deep[s] = 0;while (!dl.empty()){int x = dl.front();dl.pop();for (int temp = fir[x]; temp!= -1 ;temp = bian[temp].nex){int y = bian[temp].en;if (deep[y]==-1 && bian[temp].flow>0){deep[y] = deep[x] + 1;dl.push(y);}}}return deep[t]!=-1;
}LL dfs(int x,int t,LL limit){if (x == t) return limit;if (limit == 0) return 0;LL cur,f = 0;for (int temp = tfir[x];temp!=-1;temp = bian[temp].nex){tfir[x] = temp;int y = bian[temp].en;if (deep[y] == deep[x] + 1 && (cur = dfs(y,t,min(limit,(LL)bian[temp].flow))) ){f += cur;limit -= cur;bian[temp].flow -= cur;bian[temp^1].flow += cur;if (!limit) break;}}return f;
}
int a[100+10][100+10];int main(){#ifdef LOCAL_DEFINEfreopen("rush_in.txt", "r", stdin);#endifms(fir,255);scanf("%d%d",&n,&m);for (int i = 1;i <= n;i++)for (int j = 1;j <= m;j++)scanf("%d",&a[i][j]);for (int i = 1;i <= n;i++){for (int j = 1;j <= m;j++){for (int k = 0;k < 4;k++){int ti = i+dx[k],tj = j+dy[k];if (ti>=1 && ti<=n && tj>=1 && tj<=m){add((i-1)*m+j,(ti-1)*m+tj,1);}}}}for (int i = 1;i <= n;i++)for (int j = 1;j <=m;j++){if (a[i][j]==1){add(0,(i-1)*m+j,INF);}else if (a[i][j]==2){add((i-1)*m+j,n*m+1,INF);}}s = 0,t = n*m+1;int ans = 0;while ( bfs(s,t) ){for (int i = 0;i <= n*m+1;i++) tfir[i] = fir[i];ans += dfs(s,t,INF);}printf("%d\n",ans);return 0;
}

转载于:https://www.cnblogs.com/AWCXV/p/9088823.html

【BZOJ 1412】[ZJOI2009]狼和羊的故事相关推荐

  1. BZOJ 1412: [ZJOI2009]狼和羊的故事

    1412: [ZJOI2009]狼和羊的故事 >原题链接< Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......& ...

  2. BZOJ 1412 [ZJOI2009]狼和羊的故事(最小割)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1412 [题目大意] 给出一块地图,1表示狼的领地,2表示羊的领地,0表示其余动物的领地 ...

  3. bzoj 1412 [ZJOI2009]狼和羊的故事 最小割建图

    题面 题目传送门 解法 把\(S\)集看作和羊连接,\(T\)看作和狼连接 然后就转化成了基本的最小割模型了 对于0的处理,可以把它放在羊和狼两排点的中间,由\(S\rightarrow\)羊\(\r ...

  4. 【bzoj】 1412: [ZJOI2009]狼和羊的故事

    Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼和羊如此和谐,为什么不尝试羊狼合 ...

  5. 1412: [ZJOI2009]狼和羊的故事 最小割

    高一的时候似乎做了--然后我现在发现不会做了.. (高一代码抄多了QAQ) 题目要求的是将狼和羊分开,可以看做是分成两个点集,要使代价最小,那么也就是求一个最小割. 首先S->狼连边,权值为+∞ ...

  6. [bzoj1934]: [ZJOI2009]狼和羊的故事

    1412: [ZJOI2009]狼和羊的故事 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3105  Solved: 1567 [Submit][ ...

  7. bzoj1412[ZJOI2009]狼和羊的故事

    bzoj1412[ZJOI2009]狼和羊的故事 题意: n*m网格,每个格子可能为狼.羊或空格.现在要在一些格子边界篱笆使羊狼分开,求最短篱笆.n,m≤100 题解: 最小割问题,建一个超级源和超级 ...

  8. 题解 P2598 【[ZJOI2009]狼和羊的故事】

    P2598 [ZJOI2009]狼和羊的故事 题目描述 "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听到这首歌,心想:狼 ...

  9. [ZJOI2009]狼和羊的故事【最小割】

    题目链接 P2598 [ZJOI2009]狼和羊的故事 要让羊和狼都区别开来,需要的最小的割是多少?每只羊向四周有4个可能的方向,每只狼也是同样的,所以每个动物向周围可以跑出4个流,我们要建立栅栏,可 ...

  10. BZOJ1412 ZJOI2009 狼和羊的故事 【网络流-最小割】

    BZOJ1412 ZJOI2009 狼和羊的故事 Description "狼爱上羊啊爱的疯狂,谁让他们真爱了一场:狼爱上羊啊并不荒唐,他们说有爱就有方向......" Orez听 ...

最新文章

  1. php.ini 中文版第二部分(关于这个配制文件)
  2. ios UIWebView调用本地html和javascript,并且和ios通讯
  3. 一份不大的救命文档,一场时间与生死的接力
  4. 小米9私密相册怎么找_“拼藏搜”,手机相册还能这么玩
  5. Jenkins手动更新AWS 上面的ECS服务
  6. 使用网刻工具进行局域网内的网络同传及联想电脑同传
  7. 二次与三次B样条曲线c++实现
  8. 简简单单做股票读书笔记(1/8)
  9. 阿里小蜜:语音识别、语义分析、深度学习在手机淘宝的实战分享
  10. AMD R9 280x tri-x vapor-x OC 刷新BIOS来节能降温
  11. 一款 Windows 上的万能工具 Wox
  12. Badboy录制提示脚本错误解决方案
  13. 一文看懂GPIO口的八种工作原理
  14. 【翻译】HCP: A Flexible CNN Framework for Multi-Label Image Classification
  15. 从gPROMS换到c#的路程! 千里之行,始于足下!
  16. JavaME证书的制作和介绍
  17. 数学建模用python分析gdp_数学建模·中国GDP趋势分析与预测
  18. 《HikariCP数据库连接池实战》学习笔记(二):获取连接原理
  19. C++学习的一些经历
  20. 主板下有螺母垫板的拧螺丝的CPU散热器,螺母垫板的固定一法

热门文章

  1. 服务器宕机记录16.12.14
  2. 最新推荐 | 清华NLP图神经网络GNN论文分门别类,16大应用200+篇论文
  3. ios开发 多人语音聊天_iOS语音通话功能实现流程(实时语音通话二)
  4. windows 7 出现MTP usb设备驱动安装问题解决方法
  5. 中国版ChatGPT在哪些方面具有快速发展的机会?
  6. 燃动金秋,Stibo Systems(思迪博) 软件受邀参加2021中国服贸会
  7. Bhuman应用篇——守门员防守之SpecialAction
  8. 微信数据包解析 php,微信交互数据包分析 - 新手入门及其它(软件) - 恩山无线论坛 - Powered by Discuz!...
  9. 原深感摄像头与face id实现人脸3D扫描和建模(转)
  10. 【计算机视觉】图片拼接