BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001
1001: [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MB
Submit: 27684 Solved: 7127
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
题外话:看着这图想到对偶图,然后就想起了bzoj2007海拔那题......
题解:题意就是求最小割,把平面图转化成对偶图然后从右上角到左下角跑dijkstra就可以了......注意双向边,数组开大点。
(一开始用vector写结果爆内存了,还是数组好用...)
#include<bits/stdc++.h>
#define CLR(a, b) memset((a), (b), sizeof((a)))
using namespace std;
const int INF = 1e9+;
const int N = 2e6+;
const int M = *N;
int head[N];
int d[N], vis[N];
struct Edge{
int v, c, nex;
}E[M];
int num = ;
void add(int u,int v,int c){
E[num].v = v; E[num].c = c; E[num].nex = head[u];
head[u] = num++;
}
struct qnode{
int v,c,x;
qnode(int _v=,int _c=,int _x=):v(_v),c(_c),x(_x){}
bool operator < (const qnode &r)const{
return r.c<c;
}
};
void dij(int s, int n) {//起点、终点
CLR(vis, );
for(int i = ; i <= n; i++) d[i] = INF;
priority_queue<qnode>q;
while(!q.empty()) q.pop();
d[s] = ;
q.push(qnode(s, ));
qnode t;
while(!q.empty()) {
t = q.top(); q.pop();
int u = t.v;
if(vis[u])continue;
vis[u] = true;
for(int i = head[u]; ~i; i = E[i].nex) {
int v = E[i].v;
int c = E[i].c;
if(!vis[v] && d[v] > d[u] + c) {
d[v] = d[u] + c;
q.push(qnode(v, d[v]));
}
}
}
}
int main() {
int n, m;
int k, i, j, u, v, w;
CLR(head,-); CLR(E, ); scanf("%d%d", &n, &m);
int s = ; //起点
int t = *(n-)*(m-)+;//终点 for(i = ; i <= n; ++i) {
for(j = ; j < m; ++j) {
scanf("%d", &w);
u = ( i==? s : (*(i-)-)*(m-)+j );
v = ( i==n? t : *(i-)*(m-)+j );
add(u, v, w); add(v, u, w);
}
}
for(i = ; i < n; ++i) {
for(j = ; j <= m; ++j) {
scanf("%d", &w);
u = ( j==m? s : *(i-)*(m-)+j-+m );
v = ( j==? t : *(i-)*(m-)+j- );
add(u, v, w); add(v, u, w);
}
}
for(i = ; i < n; ++i) {
for(j = ; j < m; ++j) {
scanf("%d", &w);
u = *(i-)*(m-)+j;
v = (*(i-)+)*(m-)+j;
add(u, v, w); add(v, u, w);
}
} dij(s, t);
printf("%d\n", d[t]);
return ;
}
2640ms
BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】的更多相关文章
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- [BZOJ1001] [Beijing2006] 狼抓兔子 (最短路)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- BZOJ1001 [BeiJing2006]狼抓兔子 最小割 对偶图 最短路
原文链接http://www.cnblogs.com/zhouzhendong/p/8686871.html 题目传送门 - BZOJ1001 题意 长成上面那样的网格图求最小割. $n,m\leq ...
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- BZOJ 1001: [BeiJing2006]狼抓兔子(最短路)
平面图的最小割转化为对偶图的最短路(资料:两极相通——浅析最大最小定理在信息学竞赛中的应用) ,然后DIJKSTRA就OK了. ------------------------------------ ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)
1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...
随机推荐
- Javascript Madness: Mouse Events
http://unixpapa.com/js/mouse.html Javascript Madness: Mouse Events Jan WolterAug 12, 2011 Note: I ha ...
- java JDBC 数据库链接
1.准备环境搭建: myeclipse,sql2005,jdbc. 2.都下载完之后开始进行安装 ,前两个是属于数据库软件,正常安装即可(注意数据库登陆不要使用windows验证) <1> ...
- java获得Tomcat服务器的根目录下的内容
File f2=new File(System.getProperty("catalina.home")+ File.separator+"webapps"+F ...
- 安装pl/sql developer(内附下载地址)
前言:PL/SQL Developer是一个集成开发环境,更方便的使用oracle,这里记录一下安装过程. 第一步:下载 这里提供我的百度云连接: 链接:https://pan.baidu.com/s ...
- element-ui中使用font-awesome字体图标
element-ui提供的字体图标是很少的,所以我们需要集成其它图标来使用,nodejs的集成官方有说明,这里说明一下非nodejs开发集成图标 首先下载fontawesome,需要更改里面图标前缀, ...
- AE三维点击查询(3D Identify)的实现(转)
AE三维点击查询(3D Identify)的实现,类似ArcGIS的Identify对话框/////////////////////////////////////////////////////// ...
- AngularJS学习 之 安装
1. 安装好Node.js 2. 安装好Git 3. 安装好Yeoman 以管理员身份打开cmd 输入 npm install -g yo 回车即可开始安装Yeoman,具体的安装行为最好看官网的介绍 ...
- Qt编译目录下exe文件执行报错问题的解决办法
使用Qt5.9.3+vs2017环境,编译项目生成Debug目录,运行其中的exe文件,出现以下错误(qt creator调试状态下或出安装包后是可以运行的): 经过查阅资料,发现是我重新配置Qt开发 ...
- 网络 互联网接入方法、Mbit与MB的转换
ADSL:非对称数字用户环路(绝大多数家庭接入方法,使用电话线).可以提供最高1Mbps的上行速率和最高8Mbps的下行速率.最新的ADSL2+可以提供最高24Mbps的下行速率. 千千兆TB 千兆G ...
- Angularjs 表格插件的使用
对于相关的table组件可以使用:UI Grid (ng-grid),ng-table,smart table,Angular-Datatables,tablelite,kendo-ui中的grid. ...