二集合划分问题,,花费最小,果断最小割

首先狼和羊可能会被分割,所以不能直接在原图上跑

所以可以考虑羊向狼建边,,但流量是受图的限制的,所以把0也考虑进来,一次只向相邻的一格连边

直接跑dinic即可

注:建图时注意  (i-1)*m  而不是  i*(n-1)。。

码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
#define N 200005
#define inf 100007
int tot=-1,s,t,hou[N],d[N],xia[N],zhong[N],v[N],yuan[N],i,n,m,j,tu[105][105];
queue<int>q;
void jian(int a,int b,int c)
{++tot,zhong[tot]=b,hou[tot]=yuan[a],yuan[a]=tot,v[tot]=c;
}
void jia(int a,int b,int c)
{jian(a,b,c);jian(b,a,0);
}
bool bfs()
{for(i=1;i<=t;i++){xia[i]=yuan[i];
d[i]=inf;}q.push(s);d[s]=1;while(!q.empty()){int st=q.front();q.pop();for(i=xia[st];i!=-1;i=hou[i]){int nd=zhong[i];if(v[i]==0||d[nd]!=inf)continue;d[nd]=d[st]+1;          q.push(nd);}    }return d[t]<inf;
}
int dfs(int o,int t,int limit)
{if(limit==0||o==t)return limit;int i,f,flow=0;for(i=xia[o];i!=-1;i=hou[i]){xia[o]=i;int st=zhong[i];if(d[st]==d[o]+1&&(f=dfs(st,t,min(v[i],limit)))){//cout<<f;v[i]-=f;v[i^1]+=f;flow+=f;limit-=f;if(limit==0)break;       }           }return flow;
}
int dinic()
{int ans=0;while(bfs()){ans+=dfs(s,t,inf);}return ans;
}
int main()
{
memset(yuan,-1,sizeof(yuan));scanf("%d%d",&n,&m);s=n*m+5;t=n*m+6;for(i=1;i<=n;i++)for(j=1;j<=m;j++){scanf("%d",&tu[i][j]);        }for(i=1;i<=n;i++)for(j=1;j<=m;j++){if(tu[i][j]==0){if(j-1>=1)jia((i-1)*m+j,(i-1)*m+j-1,1);if(i-1>=1)jia((i-1)*m+j,(i-2)*m+j,1);if(j+1<=m)jia((i-1)*m+j,(i-1)*m+j+1,1);if(i+1<=n)jia((i-1)*m+j,(i)*m+j,1);}if(tu[i][j]==1){jia(s,(i-1)*m+j,4);if(j-1>=1&&tu[i][j-1]!=1)jia((i-1)*m+j,(i-1)*m+j-1,1);if(i-1>=1&&tu[i-1][j]!=1)jia((i-1)*m+j,(i-2)*m+j,1);if(j+1<=m&&tu[i][j+1]!=1)jia((i-1)*m+j,(i-1)*m+j+1,1);if(i+1<=n&&tu[i+1][j]!=1)jia((i-1)*m+j,(i)*m+j,1); }if(tu[i][j]==2){jia((i-1)*m+j,t,4);if(j-1>=1&&tu[i][j-1]!=2)jia((i-1)*m+j,(i-1)*m+j-1,1);if(i-1>=1&&tu[i-1][j]!=2)jia((i-1)*m+j,(i-2)*m+j,1);if(j+1<=m&&tu[i][j+1]!=2)jia((i-1)*m+j,(i-1)*m+j+1,1);if(i+1<=n&&tu[i+1][j]!=2)jia((i-1)*m+j,(i)*m+j,1);  }}
printf("%d",dinic());
}

2017.10.10 狼和羊的故事 思考记录相关推荐

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

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

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

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

  3. [ZJOI2009]狼和羊的故事 题解

    狼和羊的故事 怎么说呢,这道题其实不难,只是题意有那么亿点点难理解.我最开始想复杂了,理解为了栅栏长度是格点的周长,那事情就复杂了... 题目分析: 首先,要明确的是:一个狼领地和羊领地之间只需建长度 ...

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

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

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

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

  6. 【图论专题二】【网络流部分】狼和羊的故事

    [浙江省省选2009]狼和羊的故事 题目 [ZJOI2009]狼和羊的故事 (Standard IO) Time Limits: 1000 ms Memory Limits: 256000 KB De ...

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

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

  8. JOJ2737:狼与羊的故事(求图上任意两点间的桥边)

     2737: 狼与羊的故事 Result TIME Limit MEMORY Limit Run Times AC Times JUDGE 3s 65536K 53 10 Standard 村长要召开 ...

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

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

最新文章

  1. Centos7更改root密码
  2. keras 使用多GPU
  3. 从0开始利用宝塔linux面板+DSShop搭建一个简单的购物网站
  4. ws5102怎么设置虚拟服务器,【华为路由器WS5102怎么设置开双频】规格参数|限速|APP|配置|功耗_摘要频道_什么值得买...
  5. ios framework 调用第三方 framework_Python基础:标准库和常用的第三方库
  6. [转载] 大型网站的 HTTPS 实践(一)—— HTTPS 协议和原理
  7. 疑似小米10系列真机谍照首曝光:挖孔双曲面屏设计无疑
  8. 一元函数积分学基本计算例题
  9. css样式鼠标放上去变成手的形状
  10. win8计算机的录音功能,win8电脑录音机功能在哪|win8录音功能使用方法
  11. AVS3中的AMVR和EMVR
  12. 阿里云部署数据库(遇到的问题及解决方案)
  13. java货物进销管理系统【电竞杜小帅】
  14. 自动化之旅--Appium
  15. 11 边缘保留滤波(EPF)
  16. 看《越狱》体会项目管理-知识管理-性格分析
  17. Android使用RecyclerView实现上拉加载更多,下拉刷新,分组显示
  18. 东方不败III游戏修改大师
  19. [原创]ExtAspNet秘密花园(二) — 一切从头开始
  20. java web信息管理系统_Java web学生信息管理系统

热门文章

  1. mysql可以创建多少条数据类型_mysql支持的数据类型
  2. 南京航空航天大学2020数据结构课设
  3. 红橙Darren视频笔记 贝塞尔曲线实现消息拖拽粘性效果 画笔练习
  4. python小工具(一)
  5. np.vstack与np.newaxis的含义
  6. IDEA中terminal中执行git log中文乱码
  7. stylish和Tampermonkey样式及脚本
  8. cookie中JSESSIONID的由来
  9. 怎么用计算机连接电视,电视当电脑显示器怎么连接
  10. IK分词器(elasticsearch插件)