[bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图
狼抓兔子 bzoj-1001 BeiJing2006
Description

Input
Output
输出一个整数,表示参与伏击的狼的最小数量.
Sample Input
3 4
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
14
想法:显然,这题想求最小割。直接求最小割非常慢,我们考虑将它转换成对偶图。所谓对偶图,就是对于一个边和边之间没有交点的平面图来讲,对于每一个被边围出来的平面都看做一个点,如果原来平面上的边分割了两个平面,那么就将它对应的两个平面所构成的点之间连一条这条边权的边即可。然后跑最短路。
特别地,我们将start和end之间额外连一条边。然后我们将这条新连的边的将原来平面分成的两部分设为最短路中的七点和中点即可。
最后,附上丑陋的代码... ...在网上抄的代码(不会写对偶图)
#include <iostream>
#include <cstdio>
#include <queue>
using namespace std;
const int MAXV=2e6+105,MAXE=3e6+5,inf=0x7f7f7f7f;
int N,M,S,T;
struct E
{
int next,to,val;
}e[MAXE<<1];
int ecnt,G[MAXV];
void Edge(int u,int v,int w)
{
e[++ecnt]=(E){G[u],v,w};G[u]=ecnt;
e[++ecnt]=(E){G[v],u,w};G[v]=ecnt;
}
struct Node
{
int id,v;
bool operator<(const Node & ot)const
{return v>ot.v;}
};
priority_queue<Node> q;
bool inS[MAXV];int dis[MAXV];
int dijkstra()
{
for(int i=1;i<=T;i++)
{
dis[i]=inf;
}
dis[S]=0;
q.push((Node){S,0});
while(!q.empty())
{
int u=q.top().id;
q.pop();
if(inS[u]) continue;
inS[u]=true;
for(int i=G[u];i;i=e[i].next)
{
int v=e[i].to;
if(inS[v]) continue;
if(dis[v]>dis[u]+e[i].val)
{
dis[v]=dis[u]+e[i].val;
q.push((Node){v,dis[v]});
}
}
}
return dis[T];
}
int main()
{
int w;
scanf("%d%d",&N,&M);
if(N==1||M==1)
{
if(N>M) swap(N,M);
int ans=inf;
for(int i=1;i<=M;i++)
scanf("%d",&w),ans=min(ans,w);
printf("%d\n",ans);
}
else
{
S=2*(N-1)*(M-1)+1,T=S+1;
for(int i=1;i<M;i++)
{
int v=i*2;
scanf("%d",&w);
Edge(S,v,w);
}
for(int i=2;i<N;i++)
{
for(int j=1;j<M;j++)
{
int u=2*((i-2)*(M-1)+j)-1,v=2*((i-1)*(M-1)+j);
scanf("%d",&w);
Edge(u,v,w);
}
}
for(int i=1;i<M;i++)
{
int u=2*((N-2)*(M-1)+i)-1;
scanf("%d",&w);
Edge(u,T,w);
}
for(int i=1;i<N;i++)
{
for(int j=1;j<=M;j++)
{
scanf("%d",&w);
if(j==1)
{
int u=2*((i-1)*(M-1)+j)-1;
Edge(u,T,w);
}
else if(j==M)
{
int v=2*((i-1)*(M-1)+j-1);
Edge(S,v,w);
}
else
{
int u=2*((i-1)*(M-1)+j-1),v=u+1;
Edge(u,v,w);
}
}
}
for(int i=1;i<N;i++)
{
for(int j=1;j<M;j++)
{
int u=2*((i-1)*(M-1)+j)-1,v=u+1;
scanf("%d",&w);
Edge(u,v,w);
}
}
printf("%d\n",dijkstra());
}
return 0;
}
[bzoj1001][BeiJing2006]狼抓兔子_网络流_最小割转对偶图的更多相关文章
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- 【BZOJ1001】狼抓兔子(网络流)
[BZOJ1001]狼抓兔子(网络流) 题面 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨, ...
- bzoj1001: [BeiJing2006]狼抓兔子(初识是你最小割)
1001: [BeiJing2006]狼抓兔子 题目:传送门 题解: 听说这题当初是大难题...可惜当年没有网络流hahahha 现在用网络流的思想就很容易解决了嘛 给什么连什么,注意是双向边,然后跑 ...
- BZOJ1001: [BeiJing2006]狼抓兔子(优化的dinic或转化对偶图求最短路)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 30078 Solved: 7908[Submit][ ...
- [BZOJ1001][BeiJing2006]狼抓兔子(最小割转最短路|平面图转对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 31805 Solved: 8494[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子 [最小割 | 对偶图+spfa]
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19528 Solved: 4818[Submit][ ...
- BZOJ1001: [BeiJing2006]狼抓兔子【最短路+对偶图】
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1001 1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Se ...
- bzoj1001: [BeiJing2006]狼抓兔子 -- 最小割
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Description 现在小朋友们最喜欢的"喜羊羊与灰太狼 ...
- Bzoj1001 [BeiJing2006]狼抓兔子
Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 19759 Solved: 4883 Description 现在小朋友们最喜欢的"喜羊羊与 ...
随机推荐
- [NOIP 2014] 寻找道路
[题目链接] http://uoj.ac/problem/19 [算法] 首先,在反向图上从终点广搜,求出每个点是否可以在答案路径中 然后在正向图中求出源点至终点的最短路,同样可以使用广搜 时间复杂度 ...
- B1800 [Ahoi2009]fly 飞行棋 数学模拟
20分钟一遍AC,大水题,我的算法比较复杂,但是好理解,就是找可以凑出来一半周长的点来暴力枚举就行了. 题干: Description 给出圆周上的若干个点,已知点与点之间的弧长,其值均为正整数,并依 ...
- Windows phone开发之文件夹与文件操作系列(一)文件夹与文件操作
Windows phone7中文件的存储模式是独立的,即独立存储空间(IsolatedStorage).对文件夹与文件操作,需要借助IsolatedStorageFile类. IsolatedStor ...
- 有关css的选择器优先级以及父子选择器
css,又称样式重叠表,如今的网页的样式基本是div+css写出来的,功能十分强大,要想在html文件中引入css文件需要在<head></head>标签内输入一行:<l ...
- 怪异的Ubuntu
怪异的Ubuntu 简单记录ubuntu上出现并且网上不好找到甚至压根找不到解决方案的疑难杂症. lvextend扩展逻辑卷的容量不能被系统检测到 问题发生在Ubuntu 16.04系统上. 逻辑卷/ ...
- 【Linux】磁盘分区
我们在Linux操作过程中,可能会遇到磁盘分区的问题.这篇文章是对/dev/sdb 这块磁盘进行分区. linux分区不同于windows,linux下硬盘设备名为(IDE硬盘为hdx(x为从a—d) ...
- Match 基因匹配 题解(From luoguBlog)
N<=20000!N2的LCS要原地爆炸. 去您妈的优化考场上有分就行TLE60真香嘿嘿嘿 然而这显然是个板子只不过像我这样见识短浅的蒟蒻不知道罢了 正解: 某大佬的博客 转化为lis后二分 复 ...
- Apex语言(七)集合
1.集合 集合是可以存储多个记录数的变量类型. List列表集合可以包含任何数量的数据,与数组类似. Set列表集合包含多个无序的唯一记录数,集合不能具有重复记录,与列表类似. Map地图是一个键值对 ...
- Nginx.conf介绍
在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络. #运行用户user www-data; #启动进程,通常设置成和cpu的数量相等worker_process ...
- dd命令测试IO
在实际环境中,测试IO写性能 首先需要实时监测磁盘的IO sar -d interval count 同时对磁盘进行IO压力写 time dd if=/dev/zero of=baa.img bs=1 ...