ICPC-Beijing 2006 狼抓兔子
题解:
裸的最小割。
但是最大流跑不过去怎么办?
转变一下,既然最大流是一条左下<->右上的通路,我们可以把图划分为若干区域,
最后找左下到右上的最短路就行了。
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ;
template<typename T>
inline void read(T&x)
{
T f = ,c = ;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){c=c*+ch-'';ch=getchar();}
x = f*c;
}
int n,m,s,t,hed[*N*N],cnt;
int _id(int i, int j, int k) {
if(i>n||j<)return ;
if(i<||j>m)return n*m<<|;
return (i - ) * m + j + k * n * m;
}
struct EG
{
int to,nxt;
ll w;
}e[*N*N];
void ae(int f,int t,ll w)
{
e[++cnt].to = t;
e[cnt].nxt = hed[f];
e[cnt].w = w;
hed[f] = cnt;
}
struct Pair
{
int x;
ll d;
Pair(){}
Pair(int x,ll d):x(x),d(d){}
friend bool operator < (Pair a,Pair b){return a.d>b.d;}
}tp;
ll dis[*N*N];
bool vis[*N*N];
void dij()
{
priority_queue<Pair>q;
memset(dis,0x3f,sizeof(dis));dis[s]=;
q.push(Pair(s,));
while(!q.empty())
{
tp = q.top();
q.pop();
int u = tp.x;
if(vis[u])continue;
vis[u]=;
for(int j=hed[u];j;j=e[j].nxt)
{
int to = e[j].to;
if(dis[to]>dis[u]+e[j].w)
{
dis[to] = dis[u]+e[j].w;
q.push(Pair(to,dis[to]));
}
}
}
}
int main()
{
read(n),read(m);
n--,m--;
s = ,t = n*m<<|;
for(int i=;i<=n+;i++)
for(int w,j=;j<=m;j++)
{
read(w);
ae(_id(i,j,),_id(i-,j,),w);
ae(_id(i-,j,),_id(i,j,),w);
}
for(int i=;i<=n;i++)
for(int w,j=;j<=m+;j++)
{
read(w);
ae(_id(i,j,),_id(i,j-,),w);
ae(_id(i,j-,),_id(i,j,),w);
}
for(int i=;i<=n;i++)
for(int w,j=;j<=m;j++)
{
read(w);
ae(_id(i,j,),_id(i,j,),w);
ae(_id(i,j,),_id(i,j,),w);
}
dij();
printf("%lld\n",dis[t]);
return ;
}
ICPC-Beijing 2006 狼抓兔子的更多相关文章
- P4001 [ICPC-Beijing 2006]狼抓兔子
题目地址:P4001 [ICPC-Beijing 2006]狼抓兔子 平面图 边与边只在顶点相交的图. 对偶图 对于一个平面图,都有其对应的对偶图. 平面图被划分出的每一个区域当作对偶图的一个点: 平 ...
- 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...
- 洛谷 P4001 [ICPC-Beijing 2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- 解题:BJOI 2006 狼抓兔子
题面 可以看出来是最小割,然后你就去求最大流了 这么大的范围就是让你用网络流卡的?咋想的啊=.=??? 建议还是老老实实用 平面图最小割等于其对偶图最短路 这个东西来做吧,虽然这个东西跑的也挺慢的,最 ...
- [BZOJ 2006] 狼抓兔子
[题目链接] https://www.lydsy.com/JudgeOnline/problem.php?id=1001 [算法] 最小割 [代码] #include<bits/stdc++.h ...
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...
- 【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)
传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<strin ...
- bzoj1001 [ICPC-Beijing 2006]狼抓兔子
我满心以为本题正解为最短路,结果到处都是最大流…… 几乎所有的都写了什么“对偶图”跑最短路,但我真的不知道什么叫做对偶图---------------------------------------- ...
- 洛谷$P4001\ [ICPC-Beijing 2006]$狼抓兔子 网络流+对偶图
正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n ...
随机推荐
- MFC类别概述
MFC 类别主要可分为下列数大群组: ■ General Purpose classes - 提供字符串类别.数据处理类别(如数组与串行),异 常情况处理类别.文件类别...等等. ■ Windows ...
- hdoj2571【DP基础】
题意:中文题/ 思路:DP的思想要理解,就是从上一个最优状态使被传到的状态也是最优状态.因为很久没有打DP,所以连简单地这样的都wa了6次:(QAQ废话不多说). 题目要求是从(x,y)到(x,y+1 ...
- ASP.NET Core中间件计算Http请求时间
ASP.NET Core通过RequestDelegate这个委托类型来定义中间件 public delegate Task RequestDelegate(HttpContext context); ...
- LuoguP1342请柬 【最短路/建反图】By cellur925
题目传送门 开始就想直接正向跑一遍Dij把到各点的最短路加起来即可,后来发现与样例少了些,于是再读题发现需要也求出学生们回来的最短路. 但是注意到本题是有向图,如果是无向图就好说. 那么我们怎么解决? ...
- python 蓝牙模块pybluz安装
最近项目运用了蓝牙,所以来学一学蓝牙. 经过查阅,知道python的蓝牙模块是pybluz,然后老管理进行安装 出错,提示“Could not find the Windows Platform SD ...
- SpringBoot整合Spring Data Solr
此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 <depe ...
- Netbeans自定义折叠代码
只需要在模块开始注释以//<editor-fold>开始, 在模块结束行以 //</editor-fold>结束即可 Can I Create Custom Code Fold ...
- 当css样式表遇到层
(附:White-space:pre可以是样式表里卖弄body的属性,作用是保持html源代码的空格与换行,等同<pre>标签.) Css样式表可以通过被封在层里的方式来限制页面所修饰的内 ...
- J2sdk中的主要的包介绍
- jmeter配置mysql数据库步骤
安装环境: Windows10系统 jmeter版本:3.0版本 java1.8版本 安装步骤: 1.下载连接mysql数据库jar包,地址:http://download.csdn.net/deta ...