[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 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
随机推荐
- Django基础之路由(urls)层
目录 Django基础之路由(urls)层 无名分组与有名分组 无名分组 有名分组 反向解析 前段解析 后端解析 无名分组反向解析 前段解析 后端解析 有名分组的反向解析 前段解析 后端解析 路由分发 ...
- org.apache.shiro.realm.AuthorizingRealm - No cache or cacheManager properties have been set. Authorization cache cannot be obtained.
项目中用spring shiro来处理权限的问题,但是启动的时候会打印如下日志 org.apache.shiro.realm.AuthorizingRealm - No cache or cacheM ...
- c# 不让窗体显示在alt tab中
protected override CreateParams CreateParams { get { const int WS_EX_APPWINDOW = 0x40000; const int ...
- bash脚本测试总结
bash脚本测试总结 跟踪脚本的执行 可以让bash打印出你脚本执行的过程中的所有语句.这很简单,只需要使用bash的-x选项就可以做到,下面让我们来看一下. 下面的这段脚本,先是输出一个问候 ...
- 本人亲测-Setup Factory打包教程(整理并优化)
Setup Factory 9 总结 一:安装完毕立刻启动 result = Shell.Execute(SessionVar.Expand("%AppFolder%\\消息助手.exe&q ...
- 前端框架:Angular React 和 Vue的比较
前端这几年的技术发展很快,细分下来,主要可以分成四个方面: 1.开发语言技术,主要是ES6&7,coffeescript,typescript等: 2.开发框架,如Angular,React, ...
- Swift(三)基本运算符
Swift支持大部分标准C语言的运算符,并且对许多特性进行改进来减少常规编码的错误.除了支持基本运算符外,Swift还提供了2个特殊的运算符,分别是:溢出运算符和区间运算符 首先看下基本运算符 imp ...
- 微服务架构:构建PHP微服务生态
微服务架构:构建PHP微服务生态 Linux系统技术交流QQ群(1675603)验证问题答案:刘遄 导读 诞生于 2014 年的“微服务架构”,其思想经由 Martin Fowler 阐述后,在近 ...
- 五,pod控制器应用进阶
目录 Pod 资源 标签 给资源打标签 标签选择器 Pod 生命周期 pod状态探测 livenessProbe 状态探测 livenessProbe exec 测试 livenessProbe ht ...
- 抄来的,占个位儿【百度架构师是怎样搭建MySQL分布式集群】
1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示: 管理节点(MGM):这类节点的作用是管理MySQLCluster ...