题目

网格图最小割\((n,m\leq 1000)\)


分析

首先网络流可以过,但是由于无向图,所以残量网络容量也为\(w\),\(Dinic\)玄学AC,代码就不贴了

那有没有其它方法呢,网格图显然是一张平面图,平面图可以把它变为对偶图,在对偶图上跑最短路

建图比较玄学,跑的比网络流慢


代码

#include <cstdio>
#include <cctype>
#include <queue>
#include <cstring>
#define rr register
using namespace std;
const int N=2000011;
struct node{int y,w,next;}e[N*6];
int ls[N],dis[N],k=1,n,m,s,t,cnt;
pair<int,int>heap[N];
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void add(int x,int y,int w){
e[++k]=(node){y,w,ls[x]}; ls[x]=k;
e[++k]=(node){x,w,ls[y]}; ls[y]=k;
}
inline void Get_Hang(int i,int j,int w){
if (i==1) add(s,j,w);
else if (i==n) add((2*n-3)*(m-1)+j,t,w);
else add((2*i-3)*(m-1)+j,(2*i-2)*(m-1)+j,w);
}
inline void Get_Lie(int i,int j,int w){
if (j==1) add((2*i-1)*(m-1)+1,t,w);
else if (j==m) add(s,(2*i-1)*(m-1),w);
else add((2*i-2)*(m-1)+j-1,(2*i-1)*(m-1)+j,w);
}
inline void Get_Xie(int i,int j,int w){
add((2*i-2)*(m-1)+j,(2*i-1)*(m-1)+j,w);
}
inline void Push(pair<int,int>w){
heap[++cnt]=w;
rr int x=cnt;
while (x>1){
if (heap[x>>1]>heap[x])
swap(heap[x>>1],heap[x]),x>>=1;
else return;
}
}
inline void Pop(){
heap[1]=heap[cnt--];
rr int x=1;
while ((x<<1)<=cnt){
rr int y=x<<1;
if (y<cnt&&heap[y+1]<heap[y]) ++y;
if (heap[y]<heap[x]) swap(heap[y],heap[x]),x=y;
else return;
}
}
inline signed Dijkstra(){
memset(dis,42,sizeof(dis)); dis[s]=0;
heap[++cnt]=make_pair(0,s);
while (cnt){
rr int x=heap[1].second,t=heap[1].first;
Pop(); if (t!=dis[x]) continue;
for (rr int i=ls[x];i;i=e[i].next)
if (dis[e[i].y]>dis[x]+e[i].w){
dis[e[i].y]=dis[x]+e[i].w;
Push(make_pair(dis[e[i].y],e[i].y));
}
}
return dis[t];
}
signed main(){
n=iut(),m=iut(),s=(n-1)*(m-1)<<1|1,t=s+1;
for (rr int i=1;i<=n;++i)
for (rr int j=1;j<m;++j) Get_Hang(i,j,iut());
for (rr int i=1;i<n;++i)
for (rr int j=1;j<=m;++j) Get_Lie(i,j,iut());
for (rr int i=1;i<n;++i)
for (rr int j=1;j<m;++j) Get_Xie(i,j,iut());
return !printf("%d",Dijkstra());
}

#对偶图最短路,网络流#洛谷 4001 [ICPC-Beijing 2006]狼抓兔子的更多相关文章

  1. 【洛谷4001】 [ICPC-Beijing 2006]狼抓兔子(最小割)

    传送门 洛谷 Solution 直接跑最小割板子就好了. 代码实现 #include<stdio.h> #include<stdlib.h> #include<strin ...

  2. 洛谷$P4001\ [ICPC-Beijing 2006]$狼抓兔子 网络流+对偶图

    正解:网络流+对偶图 解题报告: 传送门! $umm$日常看不懂题系列了$kk$.其实就是说,给定一个$n\cdot n$的网格图,求最小割$QwQ$ 然后网格图的话显然是个平面图,又看到数据范围$n ...

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

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

  4. 洛谷 P4001 [ICPC-Beijing 2006]狼抓兔子

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

  5. P4001-[ICPC-Beijing 2006]狼抓兔子【对偶图】

    正题 题目链接:https://www.luogu.com.cn/problem/P4001 题目大意 给出一个类似于 的网格图,求起点到终点的最小割. 解题思路 最小割直接跑网络流,然后发现\(di ...

  6. BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 30078  Solved: 7908[Submit][ ...

  7. 【BZOJ1001】狼抓兔子(平面图转对偶图,最短路)

    [BZOJ1001]狼抓兔子(平面图转对偶图,最短路) 题面 BZOJ 洛谷 题解 这题用最小割可以直接做 今天再学习了一下平面图转对偶图的做法 大致的思路如下: 1.将源点到汇点中再补一条不与任何线 ...

  8. BZOJ_1001_狼抓兔子_(平面图求最小割+对偶图求最短路)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec   ...

  9. BZOJ 1001--[BeiJing2006]狼抓兔子(最短路&对偶图)

    1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec  Memory Limit: 162 MBSubmit: 29035  Solved: 7604 Descript ...

  10. 【BZOJ1001】[BeiJing2006]狼抓兔子 对偶图最短路

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

随机推荐

  1. [BUUCTF][Web][极客大挑战 2019]LoveSQL 1

    打开靶机url,页面显示有两个输入框,框中输入123',发现两个框都有sql注入问题 爆出一下错误 You have an error in your SQL syntax; check the ma ...

  2. pikachu sql inject delete 注入

    留言板输入几条信息 出现删除按钮,点他 通过burpsuite拦截请求,请求报文如下 GET /vul/sqli/sqli_del.php?id=57 HTTP/1.1 Host: 192.168.1 ...

  3. NamedTuple技巧用法

    PS: 第一眼看到这个代码的时候,就联想到了go中的构造函数,虽然知道go中的构造函数其实就类比于python中的构造函数__init__,但是不得不说,这个太像了 在日常编码中,我们经常需要写一些返 ...

  4. 第一百零一篇:DOM节点类型

    好家伙,   DOM DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model).它的作用是将网页转为一个javascript对象, 从而可以使用ja ...

  5. 【Azure Redis 缓存】Azure Redis加入VNET后,在另一个区域(如中国东部二区)的VNET无法访问Redis服务(注:两个VNET已经结对,相互之间可以互ping)

    问题描述 为了保护Redis资源,把它与VNET集成后,实现只能通过VNET内网访问.在东二的区域中部署两个Redis服务后,发现一个奇怪的现象:东1区中的VM资源通过全局对等互联(Peering)实 ...

  6. 关于Cortex-M3报错解决方法总结:Flash Download failed错误

    事情原因:在一次使用ST-LINK v2下载程序时,突然出现 Error:Flash Download Failed-"Cortex-M3"这个错误,显示没有错误,没有警告.芯片型 ...

  7. Java 小练习 创建类 + 调用(1)

    1 package com.bytezero.exer; 2 3 /** 4 * 5 * @Description 6 * @author Bytezero·zhenglei! Email:42049 ...

  8. 全面解析 Redis 持久化:RDB、AOF与混合持久化

    前言: 每次你在游戏中看到玩家排行榜,或者在音乐应用中浏览热门歌单,有没有想过这个排行榜是如何做到实时更新的?当然,依靠 Redis 即可做到. 在技术领域,我们经常听到「键值存储」 这个词.但在 R ...

  9. Zabbix与乐维监控对比分析(四)——告警管理篇

    在前面发布的Zabbix与乐维监控对比分析文章中,我们评析了二者在架构与性能.Agent管理.自动发现.权限管理.对象管理等方面的差异.接下来让我们一起看看二者在告警管理方面的差异. 告警管理是所有I ...

  10. 单词本z launch = to throw 相关词根 lanc ject jac jet bol bl bal mit miss cast

    launch = to throw 词根 launc = lanc = to throw 表示 to throw 的词根有三组 拉丁语的lanc/launc,sip 拉丁语的ject, jac(jet ...