坦白的说这是一道水题,但是因为是BZOJ上的1001,所以这道题有着特殊的意义。

  关于最大流转最短路的博客链接如下:关于最大流转最短路两三事

  这道题的图形很规矩,所以建边和建点还是很简单的。

  题目如下

现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,
而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形:

 

左上角点为(1,1),右下角点为(N,M)(上图中N=4,M=5).有以下三种类型的道路 
1:(x,y)<==>(x+1,y) 
2:(x,y)<==>(x,y+1) 
3:(x,y)<==>(x+1,y+1) 
道路上的权值表示这条路上最多能够通过的兔子数,道路是无向的. 左上角和右下角为兔子的两个窝,
开始时所有的兔子都聚集在左上角(1,1)的窝里,现在它们要跑到右下解(N,M)的窝中去,狼王开始伏击
这些兔子.当然为了保险起见,如果一条道路上最多通过的兔子数为K,狼王需要安排同样数量的K只狼,
才能完全封锁这条道路,你需要帮助狼王安排一个伏击方案,使得在将兔子一网打尽的前提下,参与的
狼的数量要最小。因为狼还要去找喜羊羊麻烦.

Input

第一行为N,M.表示网格的大小,N,M均小于等于1000.
接下来分三部分
第一部分共N行,每行M-1个数,表示横向道路的权值. 
第二部分共N-1行,每行M个数,表示纵向道路的权值. 
第三部分共N-1行,每行M-1个数,表示斜向道路的权值. 
输入文件保证不超过10M

Output

输出一个整数,表示参与伏击的狼的最小数量.

Sample Input

3 4
5 6 4
4 3 1
7 5 3
5 6 7 8
8 7 6 5
5 5 5
6 6 6

Sample Output

14
只要会最大流转最短路就可以轻易A这道题
下面贴出代码
 #include<stdio.h>
struct shit{int aim,next,lon;}e[+];
int d[+],a,b,n,m,num,star,ass,quq[+],point,head[+];
bool f[+];
void fuck(int x,int y,int s)
{
e[++point].aim=x;
e[point].lon=s;
e[point].next=head[y];
head[y]=point;
e[++point].aim=y;
e[point].lon=s;
e[point].next=head[x];
head[x]=point;
}
int main()
{
scanf("%d%d",&n,&m);
if (n == || m == )//诡异的特判
{
if (n > m){n=n+m;m=n-m;n=n-m;}
int ans = ;
for (int i = ; i < m; ++i)
{
int x;
scanf("%d",&x);
if (x < ans) ans = x;
}
printf("%d\n", ans);
return ;
}
int S=,T=(n-)*(m-)*+;//建图
for(int i=;i<n;i++)
for(int j=;j<m;j++)
{
scanf("%d",&num);
a=(i*-)*(m-)+j;
b=i**(m-)+j;
if(i==)a=S;
if(i==n-)b=T;//以下是存双向边的过程
fuck(a,b,num);
}
for(int i=;i<n-;i++)
for(int j=;j<=m;j++)
{
scanf("%d",&num);
a=*i*(m-)+j-;
b=(*i+)*(m-)+j;
if(j==)a=T;
if(j==m)b=S;
fuck(a,b,num);
}
for(int i=;i<n-;i++)
for(int j=;j<m;j++)
{
scanf("%d",&num);
a=*i*(m-)+j;
b=(*i+)*(m-)+j;
fuck(a,b,num);
}
star=;//SPFA
ass=;
f[S]=true;
for(int i=;i<=T;i++)d[i]=;
d[S]=;
while (star<=ass)
{
int x=quq[star];
f[quq[star++]]=false;
for (int i=head[x];i!=;i=e[i].next)
{
int y=e[i].aim;
if (d[y]>d[x]+e[i].lon)
{
d[y]=d[x]+e[i].lon;
if (f[y]==false)
{
quq[++ass]=y;
f[y]=true;
}
}
}
}
printf("%d",d[T]);
return ;
}
 

刷题向》图论》BZOJ1001 平面图最大流、平面图最小割、单源最短路(easy+)的更多相关文章

  1. BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路

    问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...

  2. [ACM_图论] Domino Effect (POJ1135 Dijkstra算法 SSSP 单源最短路算法 中等 模板)

    Description Did you know that you can use domino bones for other things besides playing Dominoes? Ta ...

  3. [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】

    题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...

  4. UVA 10480 Sabotage (网络流,最大流,最小割)

    UVA 10480 Sabotage (网络流,最大流,最小割) Description The regime of a small but wealthy dictatorship has been ...

  5. 算法笔记--最大流和最小割 && 最小费用最大流 && 上下界网络流

    最大流: 给定指定的一个有向图,其中有两个特殊的点源S(Sources)和汇T(Sinks),每条边有指定的容量(Capacity),求满足条件的从S到T的最大流(MaxFlow). 最小割: 割是网 ...

  6. BZOJ 2007 海拔(平面图最小割转对偶图最短路)

    首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...

  7. bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)

    bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj  luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...

  8. BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...

  9. BZOJ1001:狼抓兔子(最小割最大流+vector模板)

    1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...

随机推荐

  1. 安装g++,在centos上执行yum -y install gcc gcc-c++ libstdc++-devel

    Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: mirrors.1 ...

  2. Linux部分常用命令学习(二)

    1.wc:wc命令是一个统计的工具,主要用来显示文件所包含的行.字和字节数.wc命令是word count的缩写. 命令格式:wc [选项参数] [文件] 选项参数: -c 统计字节数 -l 统计行数 ...

  3. Jar包进行反编译,修改后重新打包

    在学习和开发JAVA项目中,我们经常会用到第三方提供的一些jar.使用这些第三方工具包,可以提高我们开发的效率,缩短开发的时间.有的第三方工具,提供具体的使用说明和源代码,有时有的却不提供源代码,使用 ...

  4. Linq:Grouping Operators

    [Category("Grouping Operators")] [Description("This sample uses group by to partition ...

  5. webpack新版本4.12应用九(配置文件之configuration)

    配置 查看原文|编辑此页 webpack 是需要传入一个配置对象(configuration object).取决于你如何使用 webpack,可以通过两种方式之一:终端或 Node.js.下面指定了 ...

  6. HTML <meta> http-equiv Attribute 说明

      1. 说明 Value Description content-type Specifies the character encoding for the document. Example: & ...

  7. XML的应用 ---- 从一个范例看xml数据、xsd验证、xslt样式

    从一个范例看XML的应用 引言 如果你已经看了Asp.Net Ajax的两种基本开发模式 这篇文章,你可能很快会发现这样一个问题:在那篇文章的方式2中,客户端仅仅是发送了页面上一个文本框的内容到服务端 ...

  8. java md5 函数

    private static final String md5(final String s) { final String MD5 = "MD5"; try { // Creat ...

  9. Bundle的使用

    a.Activity1发送: Intent intent = new Intent();   intent.setClass(activity1.this, activity2.class);   / ...

  10. java代码把字母转换大小写、、、、

    总结:从键盘输入多少次,就用for循环控制.这些需要输入的数据都放在循环内部,否则不会执行多次. package com.aaa; import java.util.Scanner; //大小写字母的 ...