Description

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

左上角点为(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
HINT

2015.4.16新加数据一组,可能会卡掉从前可以过的程序。

Source

一眼看出是最小割
但是直接写最大流就萎了…因为有10^6个点(当然是因为我的最大流比较丑跑得慢)
所以学平面图的时候顺便学了平面图和对偶图的关系
这个题给的图一看就是个很明显的平面图
对它建出对偶图之后应用最短路和最小割之间的对应关系以网络流的源点为起点跑一遍Heap-Dijkstra
最后到汇点的最短路距离就是原图的最小割答案.
跟着黄学长学了平面图转对偶图的姿势.

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define MAXN 2000100
using namespace std;
int n,m,size,top;
struct edge
{int to,w;edge *next;
}e[MAXN<<2],*prev[MAXN];
void in(int &x)
{x=0;char ch=getchar();int flag=1;while (!(ch>='0'&&ch<='9')) flag=ch=='-'?-1:flag,ch=getchar();while (ch>='0'&&ch<='9')    x=x*10+ch-'0',ch=getchar();x*=flag;
}
struct node
{int x,dis;bool operator <(const node& a)const{return dis>a.dis;}
};
priority_queue<node> q;
int dis[MAXN];
bool vis[MAXN];
void insert(int u,int v,int w)
{e[++top].to=v;e[top].next=prev[u];e[top].w=w;prev[u]=&e[top];
}
void dijkstra(int s)
{memset(dis,0x3f,sizeof(dis));q.push((node){s,0});dis[s]=0;while (!q.empty()){node t=q.top();q.pop();if (vis[t.x])   continue;for (edge *i=prev[t.x];i;i=i->next)if (dis[i->to]>t.dis+i->w){dis[i->to]=t.dis+i->w;q.push((node){i->to,dis[i->to]});}vis[t.x]=1;}
}
int main()
{in(n);in(m);size=(n*m-n-m+1)<<1;int w;for (int i=1;i<m;i++)   in(w),insert(i,size+1,w),insert(size+1,i,w);for (int i=1;i<n-1;i++)for (int j=1;j<m;j++){in(w);int u=(i<<1)*(m-1)+j,v=((i<<1)-1)*(m-1)+j;insert(u,v,w);insert(v,u,w);}for (int i=1;i<m;i++){in(w);int u=0,v=((n<<1)-3)*(m-1)+i;insert(u,v,w);insert(v,u,w);}for (int i=0;i<n-1;i++)for (int j=1;j<=m;j++){in(w);int u,v;if (j==1)   u=0,v=(i<<1)*(m-1)+m;   elseif (j==m)   u=(i<<1|1)*(m-1),v=size+1;else    u=(i<<1)*(m-1)+j-1,v=(i<<1)*(m-1)+j+m-1;insert(u,v,w);insert(v,u,w);}for (int i=0;i<n-1;i++)for (int j=1;j<m;j++){in(w);int u=(i<<1|1)*(m-1)+j,v=(i<<1)*(m-1)+j;insert(u,v,w);insert(v,u,w);}dijkstra(0);printf("%d",dis[size+1]);
}

【BeiJing2006】【BZOJ1001】狼抓兔子相关推荐

  1. BZOJ1001 狼抓兔子 终于过了!

    时间来不及了,先贴代码吧!有时间再写. 好苦逼啊,WA了若干次,还有一次RE,一次TLE. 虽然主要运用的算法和资料都由师兄提供了.还是太弱了,太天真了. 首先,数据范围就WA了,RE了,TLE了. ...

  2. [bzoj1001]狼抓兔子

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

  3. bzoj1001狼抓兔子

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

  4. 【BJOI2006】bzoj1001 狼抓兔子

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

  5. BZOJ1001 狼抓兔子

    最小割 代码 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) m ...

  6. 【BZOJ1001】狼抓兔子题解

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

  7. BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】

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

  8. 1001: [BeiJing2006]狼抓兔子(对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MB Submit: 23595  Solved: 5940 Descrip ...

  9. 【BZOJ1001】狼抓兔子

    [BZOJ1001]狼抓兔子 题面 bzoj 题解 懒得平面图转对偶图了,直接最小割板子加优化. #include <iostream> #include <cstdio> # ...

  10. 【bzoj1001】【狼抓兔子】

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

最新文章

  1. Python 数据库操作 psycopg2
  2. 撸个注解有什么难的 请看这里
  3. Python3 定时访问网页
  4. tensorflow从入门到精通100讲(一)-如何申明一个tensor,Tensorflow中最重要的基本操作
  5. nginx/tengine设置响应头中的cookie属性
  6. vb.net详解MDI窗体操作方法
  7. layui表格固定列覆盖滚动条导致错位
  8. PHP7垃圾回收机制详解(附GC处理完整流程图)
  9. Maven中引入本地jar包
  10. ubuntu 15.10 安装jdk
  11. 关于asp.net上传图片自动生成缩略图
  12. 2018为什么你一定要学Python
  13. 大规模图搜索和实时计算在阿里反作弊系统中的应用
  14. js通过pako压缩数据后java解压数据
  15. Docker端口映射不起作用的解决办法
  16. 高德地图—js.api
  17. 51单片机LCD显示温度与串口接受温度
  18. 上海市新生婴儿户口登记(出生申报)
  19. Python 安装 tensorflow
  20. 子域名接管_在S3上利用子域接管

热门文章

  1. ulimit -SHn 65535 含义详解
  2. docker简单介绍、安装使用、常用命令、docker构建springboot项目、k8s安装
  3. SpringMVC总结(动力节点荣姐)
  4. C1. Make Nonzero Sum (easy version)【Codeforces Round #829 (Div. 2】
  5. 12-24更新-下载AIMP 3音乐播放器Build 970 RC 3
  6. Ochadoop之hive on tez搭建[转自 AIMP平台wiki]
  7. jupyter notebook 404错误
  8. android sd卡数据恢复软件下载,sd卡数据恢复软件下载
  9. 用c语言编写计费程序,电信计费模拟实现(C语言)...docx
  10. ubuntu18.04网卡驱动安装(联想(Lenovo)GeekPro 2022)