职务地址:HDU 3046

最小割第一发!事实上也没什么发不发的。

。。最小割==最大流。。

入门题,可是第一次入手最小割连入门题都全然没思路。。。

sad。。对最小割的本质还是了解的不太清楚。。

这题就是对每两个相邻的格子的边界都要进行加边,然后求最大流就OK了。

RE了好长时间,注意遍历加边的时候要从1開始,而不是0開始,由于0是源点的。。

。(或许仅仅有我才犯这样的错误吧。

。)建图不多说了。。仅仅要了解了最小割,建图还是非常easy想的。

代码例如以下:

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <queue>
#include <map>
#include<algorithm>
using namespace std;
const int INF=0x3f3f3f3f;
int head[100000], source, sink, nv, cnt;
int cur[100000], num[100000], d[100000], pre[100000], q[100000], mp[300][300];
struct node
{int u, v, cap, next;
} edge[10000000];
void add(int u, int v, int cap)
{edge[cnt].v=v;edge[cnt].cap=cap;edge[cnt].next=head[u];head[u]=cnt++;edge[cnt].v=u;edge[cnt].cap=0;edge[cnt].next=head[v];head[v]=cnt++;
}
void bfs()
{memset(d,-1,sizeof(d));memset(num,0,sizeof(num));int f1=0, f2=0, i;d[sink]=0;num[0]=1;q[f1++]=sink;while(f1>=f2){int u=q[f2++];for(i=head[u];i!=-1;i=edge[i].next){int v=edge[i].v;if(d[v]==-1){d[v]=d[u]+1;num[d[v]]++;q[f1++]=v;}}}
}
void isap()
{memcpy(cur,head,sizeof(cur));bfs();int flow=0, u=pre[source]=source, i;while(d[source]<nv){if(u==sink){int f=INF,pos;for(i=source;i!=sink;i=edge[cur[i]].v){if(f>edge[cur[i]].cap){f=edge[cur[i]].cap;pos=i;}}for(i=source;i!=sink;i=edge[cur[i]].v){edge[cur[i]].cap-=f;edge[cur[i]^1].cap+=f;}flow+=f;u=pos;}for(i=cur[u];i!=-1;i=edge[i].next){if(d[edge[i].v]+1==d[u]&&edge[i].cap)break;}if(i!=-1){cur[u]=i;pre[edge[i].v]=u;u=edge[i].v;}else{if(--num[d[u]]==0) break;int mind=nv;for(i=head[u];i!=-1;i=edge[i].next){if(mind>d[edge[i].v]&&edge[i].cap){mind=d[edge[i].v];cur[u]=i;}}d[u]=mind+1;num[d[u]]++;u=pre[u];}}printf("%d\n",flow);
}
int main()
{int n, m, i, j, num=0;while(scanf("%d%d",&n,&m)!=EOF){num++;memset(head,-1,sizeof(head));cnt=0;source=0;sink=n*m+1;nv=sink+1;for(i=1; i<=n; i++){for(j=1; j<=m; j++){scanf("%d",&mp[i][j]);if(i!=1)add((i-1)*m+j,(i-2)*m+j,1);if(i!=n)add((i-1)*m+j,i*m+j,1);if(j!=1)add((i-1)*m+j,(i-1)*m+j-1,1);if(j!=m)add((i-1)*m+j,(i-1)*m+j+1,1);if(mp[i][j]==1)add(source,(i-1)*m+j,INF);else if(mp[i][j]==2)add((i-1)*m+j,sink,INF);}}printf("Case %d:\n",num);isap();}return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

HDU 3046Pleasant sheep and big big wolf(切最小网络流)相关推荐

  1. HDU 3046 Pleasant sheep and big big wolf 最小割

    题意: 给定n*m个点的矩阵 0为空点.1为羊.2为狼 相邻点之间有一条路. 问要使得狼与羊不连通最少要去掉几条边 最小割 #include<stdio.h> #include<st ...

  2. 【HDU - 3746 】Cyclic Nacklace (KMP,最小循环节问题)

    题干: CC always becomes very depressed at the end of this month, he has checked his credit card yester ...

  3. hdu 1867 求两个串的和最小 ,KMP

    题意:       给你两个字符串,让你求str1+str2,就是把1的后面和2的前面重叠的地方只显示一遍就行了 abc + bcd = abcd,要求和的长度最小,和最小的前提下求字典序最小,还有就 ...

  4. HDU 6301.Distinct Values-贪心、构造字典序最小的数列 (2018 Multi-University Training Contest 1 1004)...

    HDU6301.Distinct Values 这个题就是给你区间要求区间内的数都不相同,然后要求是字典序最小,直接贪心走一遍,但是自己写的时候,思路没有错,初始化写挫了... 将区间按左端点小的排序 ...

  5. HDU - 3987 Harry Potter and the Forbidden Forest(最小割最少边数)

    题目链接:点击查看 题目大意:给出一个由n个点和m条边组成的图,求最小割的最小边数 题目分析:和hdu6214大同小异,都是模板题,这个题目用第一种方法,也就是先跑一遍最大流,然后修改一下残余网络上的 ...

  6. HDU - 1358 Period(KMP的next数组求最小循环节)

    题目链接:点击查看 题目大意:给出一个长度为n的字符串,问有哪些前缀是周期性字符串 题目分析:因为n给的很大,所以肯定不能暴力判断了,我们可以巧妙的利用kmp的next数组进行判断,next数组有一个 ...

  7. HDU 3861 The King’s Problem 强连通分量 最小路径覆盖

    先找出强连通分量缩点,然后就是最小路径覆盖. 构造一个二分图,把每个点\(i\)拆成两个点\(X_i,Y_i\). 对于原图中的边\(u \to v\),在二分图添加一条边\(X_u \to Y_v\ ...

  8. hdu 1689 Alien’s Necklace(bfs搜索最小奇数环)

     题意,一个无向图,求该无向图中不小于3节点的最小奇数环. 思路bfs,但因为要求环上点的数目为奇数,所以不能简单的用一个vis数组记录点是否已访问过,可以改成二维的, vis[u][0]表示点在 ...

  9. HDU 4940 Destroy Transportation system(无源汇上下界网络流)

    Problem Description Tom is a commander, his task is destroying his enemy's transportation system. Le ...

最新文章

  1. MySQL:一个死锁分析 (未分析出来的死锁)
  2. Java代码安装maven jar,maven添加第三方的jar包
  3. linux版本之redhat9------终端中文软件zhcon0.2.6的安装及使用
  4. Centos上安装EPEL
  5. eclipse导入项目后,项目上有红叉,但是打开项目并没有发现带有红叉的文件【解决方案】
  6. 使用参数来防止SQL注入
  7. 计算机系统-内存的最小存储单元
  8. Windows下MySql主从配置实战教程
  9. postgresql基本命令操作
  10. MUSIC算法---空间谱估计
  11. 琴生Jensen不等式,条件期望
  12. Overloud TH3 for Mac - 电吉他效果器
  13. GAN网络学习笔记系列2-Cluster GAN
  14. 代码精进之路 码农到工匠pdf_专访张建飞:阿里技术也提倡,优雅代码和整洁架构...
  15. K8S实战进阶篇:一文带你深入了解K8S持久化存储解决方案
  16. 目前有哪些好用的测试管理工具?
  17. 【转载】FreeIPA中间CA证书已过期
  18. 牛客15029数泡泡
  19. JWT认证方式之-System.IdentityModel.Tokens.Jwt
  20. 边缘检测,Roberts 算子,Sobel算子,Canny 算子

热门文章

  1. C# mongodb 类库
  2. KMP- Knuth-Morris-Pratt 字符串查找算法
  3. 使用Feign时如何设置Feign的Header信息
  4. 用svg实现一个环形进度条
  5. [20190113]四校联考
  6. 统计学习方法---拉格朗日对偶新性
  7. EventBus设计之禅
  8. 跟着柴毛毛学Spring(3)——简化Bean的配置
  9. head tail mkdir cp
  10. Android实践 -- 监听应用程序的安装、卸载