[BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 31805 Solved: 8494
[Submit][Status][Discuss]
Description

Input
Output
输出一个整数,表示参与伏击的狼的最小数量.
Sample Input
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
HINT
2015.4.16新加数据一组,可能会卡掉从前可以过的程序。
Solution
一眼一个最小割。以为可以复习一下板子了,可以看这边数N*N*3不对呀,直接跑最小割会炸的。
于是就翻题解学到了平面图转对偶图的神奇操作。
平面图可以参考这篇博文 https://www.cnblogs.com/lfri/p/9939463.html
平面图转对偶图的方法可以参考这篇博文 https://www.cnblogs.com/qzqzgfy/p/5578785.html
像题目中这种源点和汇点在无界面的边界上的平面图叫做s-t平面图。
在这种图上可以实现求最小割转求最短路。
需要注意的是实际操作时要先把s到t连条虚边,把原图的边界的面分成两个部分,也就是说多了一个附加面作为s。
实现时主要是要给每个面(也就是对偶图中的点)编好号,代码中有注释。
Code
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pi;
//注意空间要开够
const int N=**;
inline int read(){
int x=,w=;char ch=;
while(!isdigit(ch)) w|=ch=='-',ch=getchar();
while(isdigit(ch)) x=(x<<)+(x<<)+(ch^),ch=getchar();
return w?-x:x;
}
struct edge{
int v,w,last;
}e[N*];
int tot,tail[N];
inline void add(int x,int y,int z){
e[++tot]=(edge){y,z,tail[x]};
tail[x]=tot;
e[++tot]=(edge){x,z,tail[y]};
tail[y]=tot;
}
int n,m,s,t,base;
//一个小正方形的下三角为(i-1)*(m-1)+j,上三角加个base
bool check(int i,int j){return i>=&&i<=n-&&j>=&&j<=m-;}
int down(int i,int j){return check(i,j)?(i-)*(m-)+j:s;}
int up(int i,int j){return check(i,j)?down(i,j)+base:t;}
void build(){
s=,base=(n-)*(m-),t=base<<|;
//原平面图的面有(n-1)*(m-1)*2+1个,再加个编号为0的附加面
for(int i=;i<=n;++i)
for(int j=;j<m;++j)
add(down(i-,j),up(i,j),read());
for(int i=;i<n;++i)
for(int j=;j<=m;++j)
add(up(i,j-),down(i,j),read());
for(int i=;i<n;++i)
for(int j=;j<m;++j)
add(up(i,j),down(i,j),read());
}
//这只是一个普通的堆优化dijkstra
bool vis[N];
int d[N];
void dij(){
priority_queue<pi,vector<pi>,greater<pi> > q;
memset(d,0x3f,sizeof d);d[s]=;
q.push(make_pair(d[s],s));
while(!q.empty()){
int x=q.top().second;q.pop();
if(vis[x]) continue;vis[x]=true;
for(int p=tail[x];p;p=e[p].last){
int &y=e[p].v,&w=e[p].w;
if(d[y]>d[x]+w){
d[y]=d[x]+w;
q.push(make_pair(d[y],y));
}
}
}
}
int main(){
n=read(),m=read();
build();dij();
cout<<d[t]<<endl;
return ;
}
BZOJ1001
[BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)的更多相关文章
- BZOJ1001: [BeiJing2006]狼抓兔子 (最小割转最短路)
浅析最大最小定理在信息学竞赛中的应用---周东 ↑方法介绍 对于一个联通的平面图G(满足欧拉公式) 在s和t间新连一条边e; 然后建立一个原图的对偶图G*,G*中每一个点对应原图中每一个面,每一条边对 ...
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- BZOJ1001[BeiJing2006]狼抓兔子最小割網絡流
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001[BeiJing2006]狼抓兔子——最小割
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...
- bzoj 1001 [BeiJing2006]狼抓兔子——最小割转最短路
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 #include<cstdio> #include<cstring& ...
- 【bzoj1001】[BeiJing2006]狼抓兔子 最小割+对偶图+最短路
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ 1001: [BeiJing2006]狼抓兔子 最小割
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓 ...
- [bzoj 1001][Beijing2006]狼抓兔子 (最小割+对偶图+最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
随机推荐
- Hadoop学习之 HIVE 多用户模式安装
一.启动hadoop 集群 1.启动zookeeper 集群 zkServer.sh start 2.在master.hadoop 机器上 ./start-all.sh 由于 start-all命 ...
- 检查linux是否安装java、tomcat、mysql
linux下,查看安装软件 1.linux下的java Java -version 如果出现java版本,证明java安装成功. 2.linux下的tomcat 2.1.检查linux是否安装tomc ...
- Linux Exploit系列之七 绕过 ASLR -- 第二部分
原文地址:https://github.com/wizardforcel/sploitfun-linux-x86-exp-tut-zh/blob/master/7.md 这一节是简单暴力的一节,作者讲 ...
- c# log4net安装时在AssemblyInfo中提示找不到log4net解决办法
在安装log4net时,按照安装手册需要在AssemblyInfo.cs里添加log4net的配置信息 [assembly: log4net.Config.XmlConfigurator(Config ...
- xml_dom4j
1.用dom4j解析文件 package Xml3; import java.io.File; import java.util.Iterator; import org.dom4j.Attribut ...
- 第十篇.2、python并发编程之多进程
一 multiprocessing模块介绍 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.P ...
- 二,kubernetes集群的安装初始化
目录 部署 集群架构示意图 部署环境 kubernetes集群部署步骤 基础环境 基础配置 安装基础组件 配置yum源 安装组件 初始化 master 设置docker和kubelet为自启动(nod ...
- 使用sproxy.exe访问基于soap的webservice
使用vc访问基于soap的webservice有多种方法,其中有一种是使用atlsoap,关于这个可以搜索sproxy.exe文章,不在这介绍(主要是我的写作能力太差).我写这个日记主要是项记录访问w ...
- 咕qwq
ccsp回来之后一直肚子难受,到现在还没好. 下午去人民医院急诊做了个CT,医生说是有问题的,但她看不出来,让我明天早起挂专家号去QAQ. UPD:初步诊断是胀气.医生让我先吃两天抗生素...
- Protobuffer教程
目录 什么是protobuffer? protobuffer是如何工作的? 为什么不用xml? 1.什么是protobuffer? protobuffer是一种灵活,高效,自动化的机制,用于序列化结构 ...