BZOJ1001 [BeiJing2006]狼抓兔子(平面图最小割转最短路)
。。和HDU3870类似。。注意n=1和m=1的情况。
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
#define INF (1<<30)
#define MAXN 2800000
struct Edge{
int v,w,next;
}edge[MAXN<<];
int vs,vt,NV,NE,head[MAXN];
void addEdge(int u,int v,int w){
edge[NE].v=v; edge[NE].w=w; edge[NE].next=head[u];
head[u]=NE++;
}
struct Node{
int u,d;
Node(int _u=,int _d=):u(_u),d(_d){}
bool operator<(const Node &nd)const{
return nd.d<d;
}
};
int d[MAXN];
bool vis[MAXN];
int dijkstra(){
for(int i=; i<NV; ++i){
d[i]=INF; vis[i]=;
}
d[vs]=;
priority_queue<Node> que;
que.push(Node(vs,));
while(!que.empty()){
Node nd=que.top(); que.pop();
if(nd.u==vt) return nd.d;
if(vis[nd.u]) continue;
vis[nd.u]=;
for(int i=head[nd.u]; i!=-; i=edge[i].next){
int v=edge[i].v;
if(vis[v]) continue;
if(d[v]>d[nd.u]+edge[i].w){
d[v]=d[nd.u]+edge[i].w;
que.push(Node(v,d[v]));
}
}
}
return INF;
}
int main(){
int n,m,a;
scanf("%d%d",&n,&m);
if(n== && m==){
puts("");
return ;
}
vs=(n-)*(m-)*; vt=vs+; NV=vt+; NE=;
memset(head,-,sizeof(head));
int mm=INF;
for(int i=; i<n; ++i){
for(int j=; j<m-; ++j){
scanf("%d",&a);
mm=min(mm,a);
if(i==) addEdge(i*(m-)+j,vt,a);
if(i==n-) addEdge(vs,(i-)*(m-)+j+(n-)*(m-),a);
if(i!= && i!=n-){
addEdge(i*(m-)+j,(i-)*(m-)+j+(n-)*(m-),a);
addEdge((i-)*(m-)+j+(n-)*(m-),i*(m-)+j,a);
}
}
}
for(int i=; i<n-; ++i){
for(int j=; j<m; ++j){
scanf("%d",&a);
mm=min(mm,a);
if(j==) addEdge(vs,i*(m-)+j+(n-)*(m-),a);
if(j==m-) addEdge(i*(m-)+j-,vt,a);
if(j!= && j!=m-){
addEdge(i*(m-)+j+(n-)*(m-),i*(m-)+j-,a);
addEdge(i*(m-)+j-,i*(m-)+j+(n-)*(m-),a);
}
}
}
for(int i=; i<n-; ++i){
for(int j=; j<m-; ++j){
scanf("%d",&a);
mm=min(mm,a);
addEdge(i*(m-)+j,i*(m-)+j+(n-)*(m-),a);
addEdge(i*(m-)+j+(n-)*(m-),i*(m-)+j,a);
}
}
if(n== || m==) printf("%d",mm);
else printf("%d",dijkstra());
return ;
}
BZOJ1001 [BeiJing2006]狼抓兔子(平面图最小割转最短路)的更多相关文章
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- bzoj 1001: [BeiJing2006]狼抓兔子 平面图最小割
平面图跑最大流 可以转换为其对偶图跑最短路 一个环对应一个割 找到最小环(即最短路)极为所求,注意辅助边的建立 加入读入优化 不过时间还是一般 估计是dij写的不好 大神勿喷~~~ /*** ...
- BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路
问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...
- BZOJ_2001_[BeiJing2006]狼抓兔子_最小割转对偶图
BZOJ_2001_[BeiJing2006]狼抓兔子 题意:http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析:思路同NOI2010海拔. ...
- BZOJ1001 BJOI2006狼抓兔子(最小割+最短路)
显然答案就是最小割.直接跑dinic也能过,不过显得不太靠谱. 考虑更正确的做法.作为一个平面图,如果要把他割成两半,那么显然可以用一条曲线覆盖且仅覆盖所有割边.于是我们把空白区域看成点,隔开他们的边 ...
- bzoj 1001 狼抓兔子 —— 平面图最小割(最短路)
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 平面图最小割可以转化成最短路问题: 建图时看清楚题目的 input ... 代码如下: ...
- 【BZOJ】1001: [BeiJing2006]狼抓兔子(最小割 / 对偶图)
题目 传送门:QWQ 分析 显然答案是最小割. 然后dinic卡一卡过去了. 其实是懒得写转对偶图:正解 (dinic原来写的是vector,后来改的比较鬼畜 代码 #include <bits ...
- BZOJ 1001:[BeiJing2006]狼抓兔子(最小割)
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 题意:中文. 思路:很明显是最小割,转化为最大流做.一开始看那么多点,但还是试了一下,居然过了 ...
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- 2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割)
2021.12.02 P4001 [ICPC-Beijing 2006]狼抓兔子(最小割) https://www.luogu.com.cn/problem/P4001 题意: 把图分成两部分需要的最 ...
随机推荐
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- python基础——错误处理
python基础——错误处理 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数 ...
- .pdb文件的使用方法
1.Demo1:用DLL_01生成my.dll.my.pdb.my.lib文件. 2.Demo2:在DLL_01_APP_02中使用DLL_01的dll. 步骤: 1.vs2008打开DLL_01_A ...
- 有关struts2中用到 js 总结
1.js中取Struts2中的栈里的值 var current = "${currentPage}"; 2.js 如何提交执行提交url连接 ,以及 Struts中的url如何如何 ...
- php 审核管理
权限管理界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...
- Jquery学习笔记--性能优化建议
一.选择器性能优化建议 1. 总是从#id选择器来继承 这是jQuery选择器的一条黄金法则.jQuery选择一个元素最快的方法就是用ID来选择了. 1 $('#content').hide(); 或 ...
- EF – 8.多对多关联
5.6.10 <多对多关联(上)> 时长:9分57秒 难度:难 5.6.11<多对多关联(下)> 时长:8分50秒 难度:难 如果单独地把多对多关联的CRUD拿出来讲,确实比较 ...
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...
- Linux Shell 高级编程技巧2----shell工具
2.shell工具 2.1.日志文件 简介 创建日志文件是很重要的,记录了重要的信息.一旦出现错误,这些信息对于我们排错是非常有用的:监控的信息也可以记录到日 ...
- Mysql中文乱码问题完美解决方案
drop database`netctoss_demo` ;CREATE DATABASE `netctoss_demo` CHARACTER SET 'utf8' COLLATE 'utf8_gen ...