• 回档|悠闲的漫步


    背景

    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是最长的一条路径之一。

     

    题目分析:很容易想到二叉树。利用广搜便可轻松通过。苦逼的我多打了个逗号,被C++未知的功能坑了……

    #include<iostream>
    #include<cstdio>
    using namespace std;
    
    int fa[1100],e1[1100],e2[1100],num[1100];
    int li[10000],v[10000];
    int p,ans=0,root=0;
    
    void bfs(int root)
    {
     int head=0,tail=1;
     li[1]=root; v[1]=0;
     while (head<=tail)
     {
      head++;
      int top=li[head];
      if (e1[top]!=0) { tail++; li[tail]=e1[top]; v[tail]=v[head]+1; if (v[tail]>ans) ans=v[tail];  }
      if (e2[top]!=0) { tail++; li[tail]=e2[top]; v[tail]=v[head]+1; if (v[tail]>ans) ans=v[tail]; }
     }
    }
     
    int main()
    {
     scanf("%d
    ",&p);
     for (int i=1; i
     {
      int a,b,c;
      scanf("%d%d%d",&a,&b,&c);
      if (b != 0) { e1[a]=b; fa[b]=a; }
      if (c != 0) { e2[a]=c; fa[c]=a; }
     }
     for (int i=1; i
     if (fa[i]==0) root=i;
     bfs(root);
     printf("%d",ans+1);
     return 0;
    }
  • 相关阅读:
    类之OCP(Open Closed Principle):开闭原则
    OO书籍 zz
    ObjectOriented Design Heuristics (zz)
    CSS3 filter(滤镜) 网站整体变灰色调
    js和jquery设置css样式的几种方法
    20条书写CSS代码
    js 调用向html追加内容
    移动端检测微信浏览器返回,关闭,进入后台操作
    防止表单重复提交的4种方法
    CSS浮动标准修复top塌陷和清除浮动及IE兼容标准格式
  • 原文地址:https://www.cnblogs.com/Shymuel/p/4393546.html
Copyright © 2020-2023  润新知