【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)
YEAH
终于做对这道题啦 建图的艰辛难以言表- -
顺便说一句我队列转STL啦
狼抓兔子的地图符合平面图定义,于是将该图转成对偶图并求出对偶图的最短路即可。
这篇博客给了我极大的帮助,现将链接放上
粘上自己的代码
#include<cstdio>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue> using namespace std; queue<int> q; inline long long read(){
long long num=,f=;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-') f=-;
ch=getchar();
}
while(isdigit(ch)){
num=num*+ch-'';
ch=getchar();
}
return num*f;
} struct Edge{
int next,to,val;
}edge[];
int head[],num;
inline void add(int from,int to,int val){
edge[++num]=(Edge){head[from],to,val};
head[from]=num;
} int disa[][],disb[][],id[][][];
int ID,Start,End;
bool vis[];
int dst[]; int main(){
memset(dst,/,sizeof(dst));
int n=read(),m=read();
End=n*m+;
for(int i=;i<=n;++i)
for(int j=;j<m;++j)
disa[i][j]=read();
for(int i=;i<n;++i)
for(int j=;j<=m;++j)
disb[i][j]=read();
if(n==){
int a=0x7fffffff;
for(int i=;i<m;++i) a=min(a,disa[][i]);
printf("%d",a);
return ;
}
if(m==){
int a=0x7fffffff;
for(int i=;i<n;++i) a=min(a,disb[i][]);
printf("%d",a);
return ;
} for(int i=;i<n;++i)
for(int j=;j<m;++j){
int x=read();
id[i][j][]=++ID;
id[i][j][]=++ID;
add(id[i][j][],id[i][j][],x);
add(id[i][j][],id[i][j][],x);
}
for(int i=;i<n;++i){
add(Start,id[i][][],disb[i][]);
add(id[i][][],Start,disb[i][]);
add(id[i][m-][],End,disb[i][m]);
add(End,id[i][m-][],disb[i][m]);
}
for(int i=;i<n;++i)
for(int j=;j<m-;++j){
add(id[i][j][],id[i][j+][],disb[i][j+]);
add(id[i][j+][],id[i][j][],disb[i][j+]);
}
for(int i=;i<m;++i){
add(Start,id[n-][i][],disa[n][i]);
add(id[n-][i][],Start,disa[n][i]);
add(id[][i][],End,disa[][i]);
add(End,id[][i][],disa[][i]);
}
for(int i=;i<n-;++i)
for(int j=;j<m;++j){
add(id[i][j][],id[i+][j][],disa[i+][j]);
add(id[i+][j][],id[i][j][],disa[i+][j]);
}
q.push(Start);dst[Start]=;
while(!q.empty()){
int from=q.front();vis[from]=;q.pop();
for(int i=head[from];i;i=edge[i].next){
int to=edge[i].to;
if(dst[to]>dst[from]+edge[i].val){
dst[to]=dst[from]+edge[i].val;
if(vis[to]) continue;
vis[to]=;
q.push(to);
}
}
}
printf("%d",dst[End]);
return ;
}
【Bzoj】1001狼抓兔子(平面图最小割转对偶图最短路)的更多相关文章
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- [BZOJ 2007] [Noi2010] 海拔 【平面图最小割(对偶图最短路)】
题目链接:BZOJ - 2007 题目分析 首先,左上角的高度是 0 ,右下角的高度是 1.那么所有点的高度一定要在 0 与 1 之间.然而选取 [0, 1] 的任何一个实数,都可以用整数 0 或 1 ...
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- BZOJ 1001 狼抓兔子 平面图的最小割
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1001 题目大意: 见链接 思路: 求最小割,平面图的最小割等价于对偶图的最短路 直接建 ...
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割 找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化 不过时间还是一般 估计是dij写的不好 大神勿喷~~~ /*** ...
- 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...
- BZOJ 2007 海拔(平面图最小割转对偶图最短路)
首先注意到,把一个点的海拔定为>1的数是毫无意义的.实际上,可以转化为把这些点的海拔要么定为0,要么定为1. 其次,如果一个点周围的点的海拔没有和它相同的,那么这个点的海拔也是可以优化的,即把这 ...
- bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路)
bzoj2007/luoguP2046 海拔(平面图最小割转对偶图最短路) 题目描述: bzoj luogu 题解时间: 首先考虑海拔待定点的$h$都应该是多少 很明显它们都是$0$或$1$,并且所 ...
随机推荐
- Android GreenDao 深查询 n:m 的关系
在我的应用程序这样设计的关系:和我想选择至少一个用户作为一个朋友的所有聊天. 基本上,我想要执行以下查询:\ SELECT c.* FROM CHAT c, USER u, UserChats uc ...
- 判断后台service是否在运行
public static boolean isServiceRunning(Context mContext,String className) { boolean isRunning = fals ...
- moment算本月开始日期和结束日期
moment算本月开始日期和结束日期 1.引入moment.js var vStartDate=new moment().add('month',addMonth).format("YYYY ...
- 【Web应用-Web作业】Web 作业无法直接运行 jar 文件
问题描述 在经典管理门户中将直接压缩的 jar 文件打包为 zip 包,上传到 web 作业时报错. 解决方法 jar 文件的运行需要依托于 java 进程,所以在运行 jar 文件时,我们都会以格式 ...
- UVALive 4287 Proving Equivalence (强连通分量)
把证明的关系看出一张图,最终就是要所有的点都在至少一个环中.环的判断和度数有关. 用tarjan找强连通分量,在一个强连通分量点已经等价缩点以后形成一个DAG,计算入度为0的点数a, 出度为0的b,取 ...
- Maven归纳
一.常用功能 1.Maven的中央仓库 https://mvnrepository.com/ 2.添加jar包依赖 1.首先点击pom.xml,然后点击弹出页面中的Dependencies选项,接 ...
- 如何移除 Navicat Premium for Mac 的所有文件
作者:郭文峰链接:http://www.zhihu.com/question/24210959/answer/34579422来源:知乎著作权归作者所有,转载请联系作者获得授权. 数据库连接信息存放在 ...
- spark 省份次数统计实例
//统计access.log文件里面IP地址对应的省份,并把结果存入到mysql package access1 import java.sql.DriverManager import org.ap ...
- Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo
Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: ‘\xE5\x8F\xB0\xE5\xBC\x8F…’ fo 分析如下: 首先通过语句 ...
- tomcat BIO 、NIO 、AIO
11.11活动当天,服务器负载过大,导致部分页面出现了不可访问的状态.那后来主管就要求调优了,下面是tomcat bio.nio.apr模式以及后来自己测试的一些性能结果. 原理方面的资料都是从网上找 ...