P4001 [BJOI2006]狼抓兔子
传送门
思路:
不少题解都是用网络流来做最小割(网络流是什么),但对于一个不会网络流的蒟蒻来做这题相当困难。
听机房daolao说可以重构图做最短路。然后就baidu将平面图转换成一个对偶图,因为网络流的最小割 = 对偶图的最短路,所以只要在对偶图上跑最短路(从左上角跑到右下角)就行了。
由于堆优化的Dijkstra写炸了,冒着“死亡”的风险码了个Spfa的最短路,开了O2竟然卡进800ms。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<string>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<deque>
#include<set>
using namespace std;
#define maxn 2000005
#define INF 0x3f3f3f3f
int cnt,n,m,w;
int head[maxn],vis[maxn],dis[maxn];
queue <int> q;
struct hh
{
int to,nex,dis;
}t[maxn<<];
inline int read()
{
char kr=;
char ls;
for(;ls>''||ls<'';kr=ls,ls=getchar());
int xs=;
for(;ls>=''&&ls<='';ls=getchar())
{
xs=(xs<<)+(xs<<)+ls-;
}
if(kr=='-') xs=-xs;
return xs;
}
inline void clear()//初始化
{
cnt=;
memset(vis,false,sizeof(vis));
memset(dis,INF,sizeof(dis));
memset(head,-,sizeof(head));
}
inline void add(int nex,int to,int dis)//前向星建图
{
t[cnt]=hh{to,head[nex],dis};
head[nex]=cnt++;
t[cnt]=hh{nex,head[to],dis};
head[to]=cnt++;
}
inline void getmap()//将平面图转换为对偶图
{
for(int j=;j<m;++j)//给每块标号
{
w=read();
add(,j*,w);
}
for(int i=;i<n;++i)
{
for(int j=;j<m;++j)
{
w=read();
add(*(i-)*(m-)+j*-,*(i-)*(m-)+j*,w);
}
}
if(n>=)
for(int j=;j<m;++j)
{
w=read();
add(*(n-)*(m-)+j*-,*(n-)*(m-)+,w);
}
for(int i=;i<n;++i)
{
for(int j=;j<=m;++j)
{
w=read();
if(j==) add(*(n-)*(m-)+,*(i-)*(m-)+,w);
else if(j==m) add(*i*(m-),,w);
else add(*(i-)*(m-)+(j-)*,*(i-)*(m-)+(j-)*+,w);
}
}
for(int i=;i<n;++i)
{
for(int j=;j<m;++j)
{
w=read();
add(*(i-)*(m-)+(j-)*+,*(i-)*(m-)+j*,w);
}
}
}
int main()
{
clear();
n=read();m=read();
if(n== || m==)
{
if(n>m) swap(n,m);
int ans=INF;
for(int i=;i<m;++i)
{
w=read();
ans=min(ans,w);
}
if(ans==INF) ans=;//特判只有全图只有一个点的情况
printf("%d\n",ans);
return ;
}
getmap();
dis[]=;vis[]=;//编号为 0 的点为起始点(左上角)
q.push();
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=;
for (int i=head[u];i!= -;i=t[i].nex)
{
int v=t[i].to,w=t[i].dis;
if (dis[v]>dis[u]+w)
{
dis[v] = dis[u] + w;
if (!vis[v])
{
vis[v] = ;
q.push(v);
}
}
}
}
printf("%d\n",dis[*(m-)*(n-)+]);//(2*(m-1)*(n-1)+1)号点为终点(右下角)
return ;
}
后记:
因为蒟蒻水平有限,AC这题借鉴了两位大佬的bolg:
①LittleRewriter(洛谷题解)
②kafuuchino (机房的CRK大佬)
P4001 [BJOI2006]狼抓兔子的更多相关文章
- P4001 [BJOI2006]狼抓兔子(对偶图)
P4001 [BJOI2006]狼抓兔子 最短路+对偶图 看这题最容易想到的就是网络流.Dinic可以过,据说还跑得比正解快. 如果不写网络流,那么需要知道2个前置知识:平面图和对偶图(右转baidu ...
- [洛谷P4001][BJOI2006]狼抓兔子
题目大意:给你一个n*m的网格图,有三种边,横的,纵的和斜的,要你求出它的最小割 题解:网络流 卡点:1.无向图,反向弧容量应和正向弧相同 C++ Code: #include<cstdio&g ...
- 洛谷P4001 [BJOI2006]狼抓兔子(平面图转对偶图)
传送门 明明只要最小割加点优化就能过的东西…… 然而我偏偏要去学平面图转对偶图结果发现课件关键地方看不清->这里 而且建图累的半死…… 说实话只要最大流建图的时候反向边直接设为当前边容量再加个当 ...
- BJOI2006狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 9967 Solved: 2267[Submit][S ...
- 752. [BJOI2006] 狼抓兔子
★★★ 输入文件:bjrabbit.in 输出文件:bjrabbit.out 简单对比时间限制:1 s 内存限制:162 MB Description Source: Beijin ...
- [BJOI2006]狼抓兔子
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- 1001. [BJOI2006]狼抓兔子【最小割】
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- BZOJ1001 BJOI2006 狼抓兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- [BJOI2006]狼抓兔子(网络流)
题目描述 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
随机推荐
- C#发送邮件异常:根据验证过程,远程证书无效,何解???
/// <summary> /// 发送邮件 /// </summary> /// <param name="mailSubjct">邮件主题& ...
- Kotlin基础学习
Kotlin 和 java 都是一种静态类型的编程语言.表达式的类型在编译期已经确定,编译期能验证对象是否包含想访问方法或是字段,维护正确性与性能的同时保持源代码的简洁 静态类型的 ...
- Navicat连接MySQL8.0亲测有效
今天下了个 MySQL8.0,发现Navicat连接不上,总是报错1251: 原因是MySQL8.0版本的加密方式和MySQL5.0的不一样,连接会报错. 试了很多种方法,终于找到一种可以实现的: 更 ...
- Java开发学习教程之对象的创建与使用
java面向对象中的对象创建与使用.类是对象的抽象,为对象定义了属性和行为,但类本身既不带任何数据,也不存在于内存空间中.而对象是类的一个具体存在,既拥有独立的内存空间,也存在独特的属性和行为,属性还 ...
- scrapy selenium 登陆zhihu
# -*- coding: utf-8 -*- # 导入依赖包 import scrapy from selenium import webdriver import time import json ...
- nginx 启动 + uwsgi + django
https://www.cnblogs.com/chenice/p/6921727.html https://blog.csdn.net/Aaroun/article/details/78218131
- 使用dockerfile构建自己的镜像
CentOS Linux release 7.2.1511 Docker version 17.03.1-ce 首先应该了解docker镜像的分层机制,这个网上文章很多,简单说就是对镜像的每次修改都是 ...
- sqlloader parallel调用报ORA-26002: table has index defined upon it.解决方法
ORA-26002: table has index defined upon it. This issue is caused when using the bulk load option in ...
- 01:tcp/ip基本知识
1.1 tcp常识 1.网络七层 2.TCP三层握手 ####1.第一次握手 # 建立连接时,客户端发送SYN包到服务器,其中包含客户端的初始序号seq=x,并进入SYN_SENT状态,等待服务器确认 ...
- C# 发送16进制串口数据
一个困扰两天的问题:需要通过串口向设备发送的数据:0A010 7e 08 00 11 00 00 7e 76 7f我先将每个16进制字符转换成10进制,再将其转换成ASCII码对应的字符. /// & ...