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 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...
随机推荐
- MVC 之var与dynamic
如果你用MVC写过程序,那么你应该知道ViewBag这个用于前后台的数据传递工具,那么你是否对ViewBag的用法感到过疑惑呢? ViewBag.Mode1l=new object(); ViewBa ...
- C#动态创建Gridview及批量插入到数据库
这里介绍两种动态创建Gridview的方法: (一).有时需要应付上头领导的检查,所以就弄一些静态的Gridview来显示数据,这种方法的优点就是不用连接数据库,比较方便,但是代码灵活性不高,所有数据 ...
- UNIX高手应该保持的习惯
UNIX 高手的 10 个习惯 克服不良的 UNIX 使用模式 采用 10 个能够提高您的 UNIX® 命令行效率的好习惯——并在此过程中摆脱不良的使用模式.本文循序渐进地指导您学习几项用于命令行操作 ...
- ActiveMQ Could not connect to broker URL
javax.jms.JMSException: Could not connect to broker URL: http://localhost:8161/. Reason: java.io.IOE ...
- JVM之---垃圾回收
JVM通过GC来回收堆和方法区中的内存,GC的基本原理首先会找到程序中不再被使用的对象,然后回收这些对象所占用的内存. 1.收集器 通常采用收集器的方式实现GC,主要的收集器有引用计数收集器和跟踪收集 ...
- 解决:oracle+myBatis ResultMap 类型为 map 时返回结果中存在 timestamp 时使用 jackson 转 json 报错
前言:最近在做一个通用查询单表的组件,所以 sql 的写法就是 select *,然后 resultType="map" ,然后使用 jackson @ResponseBody 返 ...
- Nginx 反向代理时获取用户的真实 IP
在平时我们开发后端程序的过程中,应该多多少少都会碰到记录客户端 IP 的场景,例如我之前写过的 APP 用户的一个审计功能,就需要获取用户的 IP 地址:还有广告系统里面,也是需要获取用户的 IP 地 ...
- .NET4.5新特性async和await修饰符实现异步编程
开篇 每一个版本的.net都会引入一些新的特性,这些特性方便开发人员能够快速实现一些功能.虽然.net版本一直在更新,但是新版本对旧版本的程序都是兼容的,在这一点上微软做的还是非常好的.每次学一个新内 ...
- html-使用表单标签实现注册页面
案例说明: - 使用表格实现页面效果 - 超链接不想要有效果,使用href="#" - 如果表格里面的单元格没有内容,使用空格作为占位符 - 使用图片标签提交表单 <in ...
- 转:Jquery如何获取某个元素前(后)的文本内容?
原文:[解决]Jquery如何获取某个元素前(后)的文本内容? <span> text here... <a id="target_element">百万创 ...