BZOJ:1001狼抓兔子
简直了非常迷 看到题目毫不犹豫的写了一个网络流,然后果真就TLE了
翻了一下题解,就是最大流最小割定理然后,然后将平面图变成对偶图,相当于是从起点到终点跑一个最短路就可以了
神马居然还有这种操作??!
呃加边那个位置是挺复杂的,但是我写对了呀~
还有一个非常迷的地方就是非要用结构体来存边吗我怎么一用数组就WA啊这是什么歪理是不是BZOJ的评测机有bug
至今不知道为什么邻接表会写挂完蛋没救了
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdlib>
using
namespace
std;
const
int
inf=0x3f3f3f3f;
int
n,m;
int
head[2000000+20];
int
dis[2000000+20];
int
inq[2000000+20],next[2000000],to[6000000+20];
struct
node
{
int
v,w;
}e[6000000+20];
int
k;
int
S,T;
inline
int
RD()
{
char
ch;
int
res=0;
ch=
getchar
();
while
(ch<
'0'
||ch>
'9'
)ch=
getchar
();
res=ch-
'0'
;
while
((ch=
getchar
())>=
'0'
&&ch<=
'9'
)res=res*10+ch-
'0'
;
return
res;
}
void
addedge(
int
u,
int
v,
int
w)
{
next[++k]=head[u];
e[k].v=v;
to[k]=e[k].v;
e[k].w=w;
head[u]=k;
next[++k]=head[v];
e[k].v=u;
to[k]=e[k].v;
e[k].w=w;
head[v]=k;
}
void
spfa()
{
memset
(dis,inf,
sizeof
(dis));
memset
(inq,0,
sizeof
(inq));
queue<
int
>q;
dis[S]=0;
inq[S]=1;
q.push(S);
while
(!q.empty())
{
int
now=q.front();
q.pop();
inq[now]=0;
for
(
int
i=head[now];i!=-1;i=next[i])
{
int
v=to[i];
v=e[i].v;
if
(dis[now]+e[i].w<dis[v])
{
dis[v]=dis[now]+e[i].w;
if
(!inq[v])
{
inq[v]=1;
q.push(v);
}
}
}
}
printf
(
"%d\n"
,dis[T]);
}
int
main()
{
memset
(head,-1,
sizeof
(head));
memset
(to,0,
sizeof
(to));
k=0;
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)
{
int
x;
scanf
(
"%d"
,&x);
if
(x < ans) ans = x;
}
printf
(
"%d\n"
, ans);
exit
(0);
}
S=0,T=2*(m-1)*(n-1)+1;
int
w;
for
(
int
i=1;i<=n;i++)
for
(
int
j=1;j<m;j++)
if
(i==1) addedge(j*2,0,RD());
else
if
(i==n)addedge(T,2*((i-2)*(m-1)+j)-1,RD());
else
addedge(2*((i-2)*(m-1)+j)-1,2*((i-1)*(m-1)+j),RD());
for
(
int
i=1;i<n;i++)
for
(
int
j=1;j<=m;j++)
if
(j==1)addedge(2*((i-1)*(m-1)+j)-1,T,RD());
else
if
(j==m)addedge(2*((i-1)*(m-1)+j)-2,0,RD());
else
addedge(2*((i-1)*(m-1)+j)-1,2*((i-1)*(m-1)+j)-2,RD());
for
(
int
i=1;i<n;i++)
for
(
int
j=1;j<m;j++)
addedge(2*((i-1)*(m-1)+j)-1,2*((i-1)*(m-1)+j),RD());
spfa();
return
0;
}
转载于:https://www.cnblogs.com/OcahIBye/p/6805075.html
BZOJ:1001狼抓兔子相关推荐
- BZOJ 1001: 狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB [ Submit][ Status] Description 现在小 ...
- bzoj 1001狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 15622 Solved: 3771 [ Sub ...
- BZOJ 1001 狼抓兔子
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 25653 Solved: 6512 [Submit ...
- BZOJ 1001 狼抓兔子(Dijkstra)
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- [BZOJ 1001] 狼抓兔子
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1001 分析 这是道经典的对偶图问题, 平面图最大流问题可以转化为其对偶图的最短路问题. 转化的 ...
- 【bzoj题解】1001 狼抓兔子
题目描述 现在小朋友们最喜欢"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个网格的地形: ...
- BZOJ 1001 狼捉兔子
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一个 ...
- BZOJ 1001: [BeiJing2006]狼抓兔子【最大流/SPFA+最小割,多解】
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 23822 Solved: 6012 [Submit ...
- 1001: [BeiJing2006]狼抓兔子(对偶图)
1001: [BeiJing2006]狼抓兔子 Time Limit: 15 Sec Memory Limit: 162 MB Submit: 23595 Solved: 5940 Descrip ...
最新文章
- eeglab教程系列(12)-使用ICA分解数据
- 【详解】Java语言的特点以及Java语言与C/C++的比较
- android 多手指触摸屏,AIR Android:关于多点触摸
- 手机做服务器性能咋样,服务器性能不足 怎样才能逼出最强状态
- 三观要正 心态要好 要快乐
- mybatis入门教程(F)
- java rsa 128_如何用java实现128位密钥的RSA算法
- 【绘图】matlab 绘制窗口分布
- spring的新注解
- windows 窗口实现隐藏任务栏预览
- Android安装软件的后缀,apk是什么文件,后缀是apk是什么文件
- QCY T3 蓝牙耳机连接电脑 声音断续卡顿
- 推荐书、网站(大多为计算机相关)
- win10激活错误,软件授权服务报告无法激活计算机怎么办?
- JAVA对接短信通知接口
- Acwing活动打卡做题数统计爬虫
- python模块,库
- xray和burp联动
- 男士穿衣 - 博文预览
- crtsiii型无砟轨道板_北京雄安城际全线轨道贯通:全程设5座车站,1小时通勤,“刷脸”进站...