[codevs2170]悠闲的漫步
题目来源
背景
描述
她决定坐一个选择使得她在去吃早草的路途中可以走过最多的小径。给你这些小径的描述,要求Bessie最多可以走过多少条小径。假定Bessie一出牛棚就有2条路径,Bessie需要从中选择一条。
农场中有P-1 (1 <= P <= 1,000) 个分岔节点(范围是1..P),引向P片草地,它们之间由小径连接。对任意一个节点来说,只有一条从牛棚(被标记為节点1)开始的路径可以到达。
考虑下面的图。线段表示小径,"%"表示草地。右边的图中的"#"表示一条到达草地的高亮的路径。
% %
/ /
2----% 7----8----% 2----% 7####8----%
/ \ / \ # # # #
1 5----6 9----% 1 5####6 9----%
\ \ \ \ \ \ \ #
\ % % % \ % % %
\ \
3-----% 3-----%
\ \
4----% 4----%
\ \
% %
从分岔节点9到达的草地是两个可以让Bessie走过最多小径的草地之一。在去吃早草的路上Bessie将走过7条不同的小径。这些草地是离牛棚也就是节点1最“远”的。
由3个整数来表示每一个节点:Cn, D1和D2,Cn是节点的编号(1 <= Cn <= P-1); D1和D2是由该节点引出的两条小径的终点(0 <= D1 <= P-1; 0 <= D2 <= P-1)。如果D1為0,表示这条小径引向的是一片牧草地;D2也一样。
输入格式
* 第2到第P行: 第i+1行有3个由空格隔开的整数,表示一个分岔节点Cn, D1和D2。
输出格式
测试样例1
输入
10
7 8 0
5 0 6
9 0 0
6 0 7
3 4 0
2 5 0
8 0 9
4 0 0
1 2 3
输出
7
备注
思路
搜索就可以过,仔细思考一下这个题可以发现就是一棵树从根节点到他的任意一个子节点的最长路径。我写了一个在水不过的DFS,应该可以有其他方法的。
PS:作为一个强迫症患者,我无法容忍存节点的数组是无序的,所以在时间允许的情况下,我把它们按序号排了一个序,虽然没有什么卵用吧,然而看着顺眼。
type tree=record
r,l,f,num:longint;
end; var a:array[-..] of tree;
i,j,n,x,y,z,sum,ans:longint; function max(x,y:longint):longint;
begin
if x<y then exit(y) else exit(x);
end; procedure dfs(x:longint);
var i,j,k:longint;
begin
if (a[x].l=)and(a[x].r=) then
begin
inc(sum);
ans:=max(ans,sum);
exit;
end;
if (a[x].l=) then
begin
inc(sum);
ans:=max(ans,sum);
dec(sum);
end;
if (a[x].r=) then
begin
inc(sum);
ans:=max(ans,sum);
dec(sum);
end;
inc(sum);
dfs(a[x].r);
dec(sum);
dfs(a[x].l);
dec(sum);
end; procedure sort(l,r: longint);
var
i,j,x:longint;y:tree;
begin
i:=l;
j:=r;
x:=a[(l+r) div ].num;
repeat
while a[i].num<x do
inc(i);
while x<a[j].num do
dec(j);
if not(i>j) then
begin
y:=a[i];
a[i]:=a[j];
a[j]:=y;
inc(i);
j:=j-;
end;
until i>j;
if l<j then
sort(l,j);
if i<r then
sort(i,r);
end; procedure init;
var i,j:longint;
begin
readln(n);
for i:= to n- do
begin
readln(x,y,z);
a[i].num:=x;
a[i].l:=y;
a[i].r:=z;
end;
end; begin
ans:=-;sum:=;
init;
sort(,n-);
dfs();
writeln(ans);
end.
[codevs2170]悠闲的漫步的更多相关文章
- 洛谷 P2959 [USACO09OCT]悠闲漫步The Leisurely Stroll
P2959 [USACO09OCT]悠闲漫步The Leisurely Stroll 题目描述 Bessie looks out the barn door at the beautiful spri ...
- 题解 洛谷P2959 【[USACO09OCT]悠闲漫步The Leisurely Stroll】
原题:洛谷P2959 不得不说这道题的图有点吓人,但实际上很多都没有用 通过题上说的“三岔路口”(对于每一个节点有三条连接,其中一条连接父节点,另外两条连接子节点)和数据,可以那些乱七八糟的路和牧场看 ...
- HDOJ 1428 漫步校园
漫步校园 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submis ...
- HDU 1428 漫步校园(记忆化搜索,BFS, DFS)
漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...
- 如何从 0 开始学 ruby on rails (漫步版)
如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对 rails 感兴 ...
- [HDU 1428]--漫步校园(记忆化搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others) M ...
- Python 项目实践二(生成数据)第二篇之随机漫步
接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...
- 今天给大家分享用Python matplotlib来写随机漫步的小程序
先安装两个库: pip install matplotlib pip install numpy 引用库: import matplotlib.pyplot as mp import numpy as ...
- Python实现随机漫步
随机漫步生成是无规则的,是系统自行选择的结果.根据设定的规则自定生成,上下左右的方位,每次所经过的方向路径. 首先,创建一个RandomWalk()类和fill_walk()函数 random_wal ...
随机推荐
- memcached全面剖析--3
memcached的删除机制和发展方向 下面是<memcached全面剖析>的第三部分. 发表日:2008/7/16 作者:前坂徹(Toru Maesaka) 原文链接:http://gi ...
- JavaScript 中的内存泄漏
JavaScript 中的内存泄漏 JavaScript 是一种垃圾收集式语言,这就是说,内存是根据对象的创建分配给该对象的,并会在没有对该对象的引用时由浏览器收回.JavaScript 的垃圾收集机 ...
- css写圆角效果
.introTips i{ position: absolute; display: block; top: 8px; right: 8px; width:; height:; font-size:; ...
- YII2框架动态创建表模型
YII2框架动态创建表模型 在YII2中,每个表对应一个model类 在开发过程中,我们在填写一个大型表单的时候,表单里有N个select下拉列表,每个下拉select来自于不同的表: 如果要在程序里 ...
- Yii通过控制台命令创建定时任务
假设Yii项目路径为 /home/apps/ 1. 创建文件 /home/apps/protected/commands/crons.php <?php $yii = '/home/apps/f ...
- 推荐一款好用的java反编译软件——JavaDecompiler
这款反编译器叫 "Java Decompiler",在网上也是久负盛名,最近因为工作需要找来用了下,果然不错,之前都是用eclipse的插件jad来看源码的.下面这个链接是Java ...
- 【Django】基于Django架构网站代码的目录结构
经典的Django项目源码目录结构 Django在一个项目的目录结构划分方面缺乏必要的规范.在Django的官方文档中并没有给出大型项目的代码建议目录结构,网上的文章也是根据项目的不同结构也有适当的 ...
- poj 2796 Feel Good 单调栈区间问题
Feel Good 题意:给你一个非负整数数组,定义某个区间的参考值为:区间所有元素的和*区间最小元素.求该数组中的最大参考值以及对应的区间. 比如说有6个数3 1 6 4 5 2 最大参考值为6,4 ...
- iphone下overflow失效问题的解决方法
overflow-y: auto; -webkit-overflow-scrolling:touch; /*加上这个让浏览器支持touch和自动滚动这样界面就可以滚动了*/
- Asp.Net MVC ajax调用 .net 类库问题
如果你还在为 ajax 调用 .net 类库还束手无策的话,相信这篇博客将帮助你解决这个世纪问题! 因为Visual Studio 内置了asp.net mvc ,不过当你添加asp.net mvc项 ...