题目来源

背景

USACO OCT09 5TH

描述

Bessie透过牛棚的大门向外望去。发现今天是一个美丽的春季早晨。她想,“我真的好想好想沐浴著春风,走在草地之中,感受嫩草温柔地抚摸四蹄地的感觉。”她知道一旦她离开了牛棚,她将沿著一条小径走一段路,然后就会出现一个三岔路口,她必须在两条小径中选择一条继续走下去。然后她又会遇到更多的三岔路口,进行更多的选择,知道她到达一个青翠的牧场為止。

她决定坐一个选择使得她在去吃早草的路途中可以走过最多的小径。给你这些小径的描述,要求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也一样。

输入格式

* 第1行: 一个单独的整数: P

* 第2到第P行: 第i+1行有3个由空格隔开的整数,表示一个分岔节点Cn, D1和D2。

输出格式

* 第一行: 一个单独的整数,表示Bessie去最远的草地的路上最多可以走过的小径的数目。

测试样例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

备注

1-2-5-6-7-8-9-P是最长的一条路径之一。

思路

  搜索就可以过,仔细思考一下这个题可以发现就是一棵树从根节点到他的任意一个子节点的最长路径。我写了一个在水不过的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]悠闲的漫步的更多相关文章

  1. 洛谷 P2959 [USACO09OCT]悠闲漫步The Leisurely Stroll

    P2959 [USACO09OCT]悠闲漫步The Leisurely Stroll 题目描述 Bessie looks out the barn door at the beautiful spri ...

  2. 题解 洛谷P2959 【[USACO09OCT]悠闲漫步The Leisurely Stroll】

    原题:洛谷P2959 不得不说这道题的图有点吓人,但实际上很多都没有用 通过题上说的“三岔路口”(对于每一个节点有三条连接,其中一条连接父节点,另外两条连接子节点)和数据,可以那些乱七八糟的路和牧场看 ...

  3. HDOJ 1428 漫步校园

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  4. HDU 1428 漫步校园(记忆化搜索,BFS, DFS)

    漫步校园 http://acm.hdu.edu.cn/showproblem.php?pid=1428 Problem Description LL最近沉迷于AC不能自拔,每天寝室.机房两点一线.由于 ...

  5. 如何从 0 开始学 ruby on rails (漫步版)

    如何从 0 开始学 ruby on rails (漫步版) ruby 是一门编程语言,ruby on rails 是 ruby 的一个 web 框架,简称 rails. 有很多人对  rails 感兴 ...

  6. [HDU 1428]--漫步校园(记忆化搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1428 漫步校园 Time Limit: 2000/1000 MS (Java/Others)    M ...

  7. Python 项目实践二(生成数据)第二篇之随机漫步

    接着上节继续学习,在本节中,我们将使用Python来生成随机漫步数据,再使用matplotlib以引人瞩目的方式将这些数据呈现出来.随机漫步是这样行走得到的路径:每次行走都完全是随机的,没有明确的方向 ...

  8. 今天给大家分享用Python matplotlib来写随机漫步的小程序

    先安装两个库: pip install matplotlib pip install numpy 引用库: import matplotlib.pyplot as mp import numpy as ...

  9. Python实现随机漫步

    随机漫步生成是无规则的,是系统自行选择的结果.根据设定的规则自定生成,上下左右的方位,每次所经过的方向路径. 首先,创建一个RandomWalk()类和fill_walk()函数 random_wal ...

随机推荐

  1. 教了几天C语言 C语言竞赛------家长们你们为什么这么急!!

    由于工大某些传统,暑假放一个月,想想有很多事情要做,而且回去也是热着,倒不如不回家了,在哈尔滨正好避暑,又能轻轻松松的吧事情做了,暑假还能有个好的休息,这样想着,最终决定不回去了.其实不回去的话,就会 ...

  2. linux shell命令的常用快捷键

    一些shell的常用快捷键.   Ctrl + a 切换到命令行开始  Ctrl + e 切换到命令行末尾  Ctrl + l 清除屏幕内容  Ctrl + u 清除剪切光标之前的内容  Ctrl + ...

  3. 【8】了解Bootstrap栅格系统基础案例(3)

    这次我们来说下列偏移: 列偏移就是使用 .col-md-offset-* 类可以将列向右侧偏移.这些类实际是通过使用 * 选择器为当前元素增加了左侧的边距(margin).例如,.col-md-off ...

  4. 第一部分实现功能:使用一个TabControl和一个Memo和TDictionary类实现文本临时存储

    效果图: 一期功能概要: a.双击tab关闭tab,双击tab右边空白添加tab(标题为以hhnnsszzz的时间格式命名) b.切换tab将数据存入dictionary,key为标题,value为m ...

  5. 2016041601 - maven用途

    以前只是使用maven只是当成jar依赖管理工具,并没有想到它有多么厉害的功能.现在看书系统学习maven才发现它的强大之处.个人认为通过博客去学习掌握一门技术,这是很低层次的学习方法.学习金字塔,学 ...

  6. MFC应用程序向导生成的文件

    比方说我们用Visio Studio创建了一个MFC应用程序,名称为Mysdi.在创建这个项目的时候,默认的会生成许多类和文件,就关于这些文件的内容和要点展开以下论述. 框架窗口类头文件 向导为项目M ...

  7. ios音频视频资料--备用

    视频播放 MediaPlayer.framework MPMoviePlayerViewController VS MPMoviePlayerController MPMoviePlayerViewC ...

  8. VS2012格式化插件配置备份

    VS2012联机插件AStyle --style=allman --indent=spaces=4 --align-pointer=type --align-reference=type --max- ...

  9. 如何使一个input文本框随其中内容而变化长度(转)

    第一: <input type="text" onkeydown="this.onkeyup();" onkeyup="this.size=(t ...

  10. 试求由a,b,c三个字母组成的n位符号串中不出现aa图像的符号串的数目

    1.错误解法       共3^n,含aa的共3^(n-2),那么相减8*3^(n-2).       分析:aa的左右两边不能是a,所以结果肯定大了. 2.正确解法       假设符合条件的符合串 ...