BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述
题解
平面图最小割=对偶图最短路
假设起点和终点间有和其他边都不相交的一条虚边。
如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个点。
对偶图中的每一个点,和它在平面图中每一个相邻的图形间有边,边权为原来分开它们的边的边权。
于是平面图最小割就是对偶图最短路。
\(\mathrm{Code}\)
#include<bits/stdc++.h>
using namespace std;
const int maxn=2*1000*1000+7;
int n,m,S,T;
int Head[maxn],to[maxn*3],Next[maxn*3],tot=1,w[maxn*3];
void addedge(int x,int y,int z){
to[++tot]=y,Next[tot]=Head[x],Head[x]=tot,w[tot]=z;
}
void add(int x,int y,int z){
addedge(x,y,z);addedge(y,x,z);
}
void Init(void){
scanf("%d%d",&n,&m);
}
int id(int x,int y,int type){
return (x-1)*(m-1)+y+(type-1)*(n-1)*(m-1);
}
void Hori(void){
for(int i=1,x;i<m;i++){
scanf("%d",&x);
add(S,id(1,i,1),x);
}
for(int i=2,x;i<n;i++){
for(int j=1;j<m;j++){
scanf("%d",&x);
add(id(i-1,j,2),id(i,j,1),x);
}
}
for(int i=1,x;i<m;i++){
scanf("%d",&x);
add(id(n-1,i,2),T,x);
}
}
void Longi(void){
for(int i=1,x;i<n;i++){
scanf("%d",&x);add(T,id(i,1,2),x);
for(int j=2;j<m;j++){
scanf("%d",&x);
add(id(i,j-1,1),id(i,j,2),x);
}
scanf("%d",&x);add(id(i,m-1,1),S,x);
}
}
void Obli(void){
for(int i=1;i<n;i++){
for(int j=1,x;j<m;j++){
scanf("%d",&x);
add(id(i,j,1),id(i,j,2),x);
}
}
}
void Graph_build(void){
S=(n-1)*(m-1)*2+1,T=S+1;
Hori();
Longi();
Obli();
}
int dis[maxn];
bool vis[maxn];
#define pii(x,y) make_pair(x,y)
void dijkstra(void){
memset(dis,0x3f,sizeof(dis));
priority_queue<pair<int,int> >q;
q.push(pii(0,S));dis[S]=0;
while(!q.empty()){
int x=(q.top()).second;q.pop();
if(vis[x]) continue;vis[x]=1;
if(x==T) return;
for(int i=Head[x];i;i=Next[i]){
int y=to[i];
if(dis[y]>dis[x]+w[i]){
dis[y]=dis[x]+w[i];
q.push(pii(-dis[y],y));
}
//if(y==T) return;
}
}
}
void One(void){
int ans=0x3f3f3f3f,x;
for(int i=1;i<=n;i++) for(int j=1;j<m;j++){
scanf("%d",&x);ans=min(ans,x);
}
for(int i=1;i<n;i++) for(int j=1;j<=m;j++){
scanf("%d",&x);ans=min(ans,x);
}
printf("%d\n",ans);
}
void Work(void){
if(n==1||m==1){
One();return;
}
Graph_build();
dijkstra();
printf("%d\n",dis[T]);
}
int main(){
Init();
Work();
return 0;
}
BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路的更多相关文章
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割 找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化 不过时间还是一般 估计是dij写的不好 大神勿喷~~~ /*** ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ-1001 狼抓兔子 (最小割-最大流)平面图转对偶图+SPFA
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 14686 Solved: 3513 [Submit][ ...
- BZOJ1001:狼抓兔子(最小割最大流+vector模板)
1001: [BeiJing2006]狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨, ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...
- 【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH 题目链接 终于做对这道题啦 建图的艰辛难以言表- - 顺便说一句我队列转STL啦 狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可. 这篇博客给了我极大的帮助 ...
随机推荐
- [转]UiPath State Machines
本文转自:https://docs.uipath.com/studio/docs/state-machines A state machine is a type of automation that ...
- java使用htmlunit工具抓取js中加载的数据
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容.项目可以模拟浏览器运行,被誉为java浏览器的开源实现.这个没有界面的浏览器,运行速度 ...
- Android Studio 使用Memory Monitor进行内存泄露分析
在使用Android Studio进行内存泄露分析之前,我们先回顾一下Java相关的内存管理机制,然后再讲述一下内存分析工具如何使用. 一.Java内存管理机制 1. Java内存分配策略 Java ...
- swiper手滑导航圆点不同步
// 滚动图 var mySwiper = new Swiper('.swiper-container', { // 如果需要分页器 pagination: { el: '.swiper-pagina ...
- Kali Linux上外网
第一部分 攻击者杀链 第一章 走进Kali Linux 镜像准备:32位kali linxu 2019(之前下载好了,按书上的版本太低了要重新配置好多东西就用最新版了) , win XP 前两章照着 ...
- 【Postman】举例实战——天气查询
准备工作: 1.下载postman(搜索官网下载即可) 2.接口文档(以聚合上去免费API:天气查询接口) 打开postman: 1.输入url 2.请求方式 3.请求参数 4.在postman中运行 ...
- ubuntu18.04因java路径原因启动jenkins失败
我的云服务器ubuntu18.04上本来装了jenkins,今天安装完tomcat后,将原有的openjdk卸载了,安装了jdk8u192, 此时浏览器访问8080端口显示的就是tomcat安装成功的 ...
- 【使用篇二】QueryDSL与SpringDataJPA协作使用(20)
QueryDSL是一个Java语言编写的通用查询框架,专注于通过JavaAPI方式构建安全的SQL查询.QueryDSL可以应用到NoSQL数据库上,QueryDSL查询框架可以在任何支持的ORM框架 ...
- fprintf()函数
fprintf函数可以将数据按指定格式写入到文本文件中.其调用格式为: 数据的格式化输出:fprintf(fid,format,variables) 按指定的格式将变量的值输出到屏幕或指定文件 fid ...
- 女朋友会 Python 是多么可怕的一件事!
阅读文本大概需要 8 分钟. 1 目 标 场 景 女朋友会 Python 是多么可怕的一件事! 一位朋友告诉忽略了一件事,假设女朋友会 Python 的话,那岂不是要翻车?如果是这样的话,女朋友发 ...