这个系列总算是做完了,这是我第一次高效率做完四道题,虽然中间有两道水题,但是第一和第四题还是蛮好的,但是只要能想到思路就很快能打完的。

像这道题,刚开始在想能不能用DP?但是苦于不知道怎么实施,后来又想,这么多点,有点像最短路径,但是总共有50000个点,边数有可能N*N吗?

于是我拿起笔算了一下,发现连边的话,先按X轴由小到大排序一遍,然后往后找 X 比当前点大 <=2 的 X,再通过比较 Y 之间的关系,只要相差不超过 2 就连接一条双向边,这样后面的点就不需要往前找了,但有人会问,会不会是 50001*25000 而超时呢?我也想过,但是发现根本不可能,因为一个点最多能连接24条边,儿往后最多能找到14个点,也就是时间最多也就 50000*14 而事实上,这也是根本不可能达到的。所以我们连好边后做一遍 spfa 就行了。

 const maxn=;
type
node=record
f,t:longint;
end;
position=record
x,y:longint;
end;
var n,t,i,j,num,now,ans:longint;
b:array[..] of node;
d,head:array[..] of longint;
pos:array[..] of position;
p:array[..] of boolean;
f:array[..] of longint;
procedure qs(t,w:longint);
var l,r,mid:longint;
tem:position;
begin
l:=t; r:=w; mid:=pos[(l+r) shr ].x;
repeat
begin
while pos[l].x<mid do inc(l);
while pos[r].x>mid do dec(r);
if l<=r then
begin
tem:=pos[l];
pos[l]:=pos[r];
pos[r]:=tem;
inc(l);
dec(r);
end;
end;
until l>r;
if t<r then qs(t,r);
if l<w then qs(l,w);
end;
procedure spfa;
var l,r,now,nowe:longint;
begin
fillchar(p,sizeof(p),true);
for l:= to n do d[l]:=maxn;
l:=; r:=; f[]:=; d[]:=; p[]:=false;
while l<=r do
begin
now:=f[l];
nowe:=head[now];
while nowe<> do
begin
if d[now]+<d[b[nowe].t] then
begin
d[b[nowe].t]:=d[now]+;
if p[b[nowe].t] then
begin
p[b[nowe].t]:=false;
inc(r);
f[r]:=b[nowe].t;
end;
end;
nowe:=b[nowe].f;
end;
inc(l);
p[now]:=true;
end;
end;
procedure insert(f,t:longint);
begin
inc(num);
b[num].f:=head[f];
b[num].t:=t;
head[f]:=num;
end;
begin
readln(n,t);
for i:= to n do
with pos[i] do readln(x,y);
qs(,n);
pos[].x:=; pos[].y:=;
for i:= to n- do
begin
now:=i+;
while (pos[now].x-pos[i].x<=) and (now<=n) do
begin
if abs(pos[now].y-pos[i].y)<= then
begin
insert(i,now);
insert(now,i);
end;
inc(now);
end;
end;
spfa;
ans:=maxn;
for i:= to n do
if (ans>d[i]) and (pos[i].y=t) then ans:=d[i];
if ans<>maxn then writeln(ans)
else writeln(-);
end.

(转载请注明出处:http://www.cnblogs.com/Kalenda/)

P3383: [Usaco2004 Open]Cave Cows 4 洞穴里的牛之四的更多相关文章

  1. bzoj3383[Usaco2004 Open]Cave Cows 4 洞穴里的牛之四*

    bzoj3383[Usaco2004 Open]Cave Cows 4 洞穴里的牛之四 题意: 平面直角坐标系有n个点,从(0,0)出发,从一个点上可以跳到所有与它横纵坐标距离都≤2的点上,求最少步数 ...

  2. 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二

    3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 21  Solved ...

  3. Bzoj 3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一

    3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 64  Solved ...

  4. bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二*

    bzoj3381[Usaco2004 Open]Cave Cows 2 洞穴里的牛之二 题意: RMQ问题.序列长度≤25000,问题数≤25000. 题解: 倍增. 代码: #include < ...

  5. [BZOJ3380] [USACO2004 Open]Cave Cows 1 洞穴里的牛之一

    Description ​ 很少人知道其实奶牛非常喜欢到洞穴里面去探险. ​ 洞窟里有N(1≤N≤100)个洞室,由M(1≤M≤1000)条双向通道连接着它们.每对洞室间 至多只有一条双向通道.有K( ...

  6. P3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一

    还是蛮简单的一道题,首先dfs一遍,在所有能到达放有干草的洞穴的所有路径中,找出路径上最小伐值的最大值,按这个值由小到大,再来一遍贪心就行了,能放就放,不能放拉倒(也可以理解为,不能放把最前一个删了) ...

  7. bzoj3380: [Usaco2004 Open]Cave Cows 1 洞穴里的牛之一(spfa+状压DP)

    数据最多14个有宝藏的地方,所以可以想到用状压dp 可以先预处理出每个i到j的路径中最小权值的最大值dis[i][j] 本来想用Floyd写,无奈太弱调不出来..后来改用spfa 然后进行dp,这基本 ...

  8. P3382: [Usaco2004 Open]Cave Cows 3 洞穴里的牛之三

    首先,我们先确定,最长的曼哈顿距离只可能为 x1+y2-(x2+y2) 和 x1-y1-(x2-y2) 所以我们只需要维护四个值, 分别代表 max(x+y) ; max(x-y) ; min(x+y ...

  9. P3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二

    这题..思维上远没有上一题复杂,是一个裸的RMQ..利用倍增就可以解决了. var n,q,i,j,f,t,c:longint; a:array[..,..] of longint; function ...

随机推荐

  1. 【转载】FPGA功耗的那些事儿

    在项目设计初期,基于硬件电源模块的设计考虑,对FPGA设计中的功耗估计是必不可少的. 笔者经历过一个项目,整个系统的功耗达到了100w,而单片FPGA的功耗估计得到为20w左右, 有点过高了,功耗过高 ...

  2. 【改进版】C++小程序中一个cout输出语句背后的堆栈知识

    最开始写这篇文章的时候,凭着自己对汇编的一点理解就堆出了这些内容,经 egmkang的指点,才发觉自己是井底之蛙,花了半天的功夫,去学习顺序点等内容.针对上次写的程序,我决定添一些内容,把程序2后面的 ...

  3. Windows 7/8/8.1 硬盘安装法实现 ubuntu 14.04 双系统

    一.软件准备 1. 下载 Ubuntu 系统镜像:http://www.ubuntu.com/download/desktop/ : 这里使用的是 ubuntu 14.04.1 LTS 64bit 版 ...

  4. 未能加载文件或程序集“Oracle.Web, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或它的某一个依赖项

    当前系统环境描述: Win7x64+VS2012+IIS7 当前情况描述: 发布Web服务,在浏览的时候出现以下问题:未能加载文件或程序集“Oracle.Web, Version=2.112.1.0, ...

  5. Silverlight取得Session

    首先Session是运行在服务器上的,而Silverlight运行在客户端.因此在Silverlight中使用SESSION的说法并不准确, 只因大家经常这样搜索才起这个名字. 有两种方法实现Silv ...

  6. php 安装xdebug扩展

    php 扩展获取地址 http://pecl.php.net/package/ 编译安装的过程 wget http://pecl.php.net/get/xdebug-2.2.2.tgz tar -z ...

  7. mysql中存不进去json_encode格式的数据

    主要是因为json_encode格式的数据,中间带有\,在存入数据库的时候,会把反斜杠删除了. 所以,想要存进去的话,需要在外层调用一下函数addslashes();这个函数会在每个反斜杠的前面添加反 ...

  8. Fix: Compile project encounter undefined reference to“xxx”error

    Need to add all the new cpp files to jni/Andriod.mk folder:

  9. 使用WIF实现单点登录Part III —— 正式实战

    我们接下来的demo将包括以下的工程: SiteA —— 基于.net framework 4.5的MVC 4程序,使用WIF 4.5的SDK,第一个RP SiteB —— 基于.net framew ...

  10. 在EF的code frist下写稳健的权限管理系统:开篇(一)

    环境:EF6.0.0.0+Autofac3.5.0.0+MVC4.0+pure6.0+Jquery IDE:vs2012,数据库:vs2008r2 搭建环境如下: 我给它取名字为cactus:仙人球, ...