爱心蜗牛

猫猫把嘴伸进池子里,正准备“吸”鱼吃,却听到门铃响了。猫猫擦了擦脸上的
水,打开门一看,那人正是她的好朋友——川川。
川川手里拿着一辆玩具汽车,对猫猫说:“这是我的新汽车!”接着,伴随一阵塑料
叩击声,玩具汽车的车门竟开了,一只蜗牛慢慢吞吞爬了出来。 
“哇!这么大的蜗牛……”猫猫惊讶道。 
“这是我的宠物蜗牛,他叫点点。”川川介绍道。
“把他送给我好吗?”猫猫央求道。
“可以让他陪你几天,但是不能送给你……”
点点沿着川川的身体,爬到了地上,又移到了猫猫的池子旁边,只听见猫猫向川川
介绍她的“创意吃鱼法 ”,心里不禁起了一丝凉意:“这个女生太毒了……吃鱼前还要玩
鱼……”转眼一看,池中的鱼依旧畅快地游来游去。
“或许这些鱼听不懂猫语吧……好在我会一点儿猫语,也会一点鱼语……阿弥陀
佛,善哉善哉。我还是救救这些鱼吧……”点点自言自语,一边费力地移动着身躯。他
认识到——单凭自己的力量,把猫猫的阴谋告诉每一条鱼,似乎不太可能——自己底盘
太低,走不快,看来只得想其他办法来传达信息。一翻认真思考之后,点点想到,如果
把猫猫的计划告诉其中一条鱼,再让鱼们互相传达消息,那么在相对较短的时间内,每
条鱼都会得知猫猫的计划。
鱼们的社会等级森严,除了国王菜鱼之外,每条鱼均有且只有一个直接上级,菜鱼则没
有上级。如果A 是B的上级,B 是的C上级,那么 A 就是的C上级。
绝对不会出现这样两条鱼A、B :A是的上级,B 也是的上级。
最开始的时刻是0,点点要做的,就只是用1 单位的时间把猫猫的阴谋告诉某一条
“信息源鱼”,让鱼们自行散布消息。在任意一个时间单位中,任何一条已经接到通知
的鱼,都可以把消息告诉他的一个直接上级或者直接下属。
现在,点点想知道:
1.到底需要多长时间,消息才能传遍池子里的鱼? 
2.使消息传递过程消耗的时间最短,可供选择的“信息源鱼”有那些?

输入格式:

有多组输入数据,每组数据:
第一行有一个数N(N ≤1000 ),表示池中的鱼数,池鱼按照1到n编上了号码、国
王菜鱼的标号是1。 
第2 行到第N 行(共N-1 行),每一行一个数,第I 行的数表示鱼I的直接上级的标号。

输出格式:

对于每组输入数据:
第一行有一个数,表示最后一条鱼接到通知的最早时间。
第二行有若干个数,表示可供选择的“信息源鱼”的标号,按照标号从小到大的顺序输出,中间用空格分开。

样例输入:

8
1
1
3
4
4
4
3

样例输出:

5
3 4 5 6 7

数据范围:

N ≤1000

时间限制:

1000

 
貌似网上没有题解,我来写一个。
树形动规,其实此题下属、上级没有任何区别,只不过是一棵树,没有环罢了。
对于每一个节点以它为根节点动规,将所有子树的f值从大到小排序,s1,s2...sn(s1<s2<...<sn)
则该节点f[x]=max{si+i}
注意排序时如果用stl就要把数组开在void里面。
 #include<cstdio>
 #include<iostream>
 #include<cstring>
 #include<algorithm>
 using namespace std;
 ;
 ],des[N*],size=,ans[N],f[N];
 bool vis[N];
 inline void combine(int x,int y)
 {
     size++;
     des[size]=y;
     next[size]=first[x];
     first[x]=size;
     return;
 }
 inline bool cmp(int x,int y)
 {
     return x>y;
 }
 inline void dfs(int x)
 {
     ];
     vis[x]=;
     ;
     for(int i=first[x];i;i=next[i]) if(!vis[des[i]])
     {
         dfs(des[i]);
         rec[++sir]=f[des[i]];
     }
     ) f[x]=;
     sort(rec+,rec+sir+,cmp);
     ;i<=sir;i++) f[x]=max(f[x],rec[i]+i);
     return;
 }
 int main()
 {
     int x,n;
     scanf("%d",&n);
     ;i<=n;i++)
     {
         scanf("%d",&x);
         combine(x,i);
         combine(i,x);
     }
     ,mi=,tmp;
     ;i<=n;i++)
     {
         memset(vis,,sizeof(vis));
         memset(f,,sizeof(f));
         dfs(i);
         tmp=f[i];
         if(tmp<mi)
         {
             mi=tmp;
             s=;
             ans[]=i;
         }
         else if(tmp==mi) ans[++s]=i;
     }
     printf("%d\n",mi);
     ;i<=s;i++) printf("%d ",ans[i]);
     printf("\n");
     ;
 }
 

XJOI1571爱心蜗牛【树形动规】的更多相关文章

  1. 【树形动规】HDU 5834 Magic boy Bi Luo with his excited tree

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5834 题目大意: 一棵N个点的有根树,每个节点有价值ci,每条树边有费用di,节点的值只能取一次,边 ...

  2. P2015 二叉苹果树 (树形动规)

    题目描述 有一棵苹果树,如果树枝有分叉,一定是分2叉(就是说没有只有1个儿子的结点) 这棵树共有N个结点(叶子点或者树枝分叉点),编号为1-N,树根编号一定是1. 我们用一根树枝两端连接的结点的编号来 ...

  3. [LUOGU1122] 最大子树和 - 树形动规

    题目描述 小明对数学饱有兴趣,并且是个勤奋好学的学生,总是在课后留在教室向老师请教一些问题.一天他早晨骑车去上课,路上见到一个老伯正在修剪花花草草,顿时想到了一个有关修剪花卉的问题.于是当日课后,小明 ...

  4. 树形动规--没有上司的舞会--C++

    题目来源:code[VS] 题目描述 Description Ural大学有N个职员,编号为1~N.他们有从属关系,也就是说他们的关系就像一棵以校长为根的树,父结点就是子结点的直接上司.每个职员有一个 ...

  5. [SDOI2011]消耗战(虚树+树形动规)

    虚树dp 虚树的主要思想: 不遍历没用的的节点以及没用的子树,从而使复杂度降低到\(\sum\limits k\)(k为询问的节点的总数). 所以怎么办: 只把询问节点和其LCA放入询问的数组中. 1 ...

  6. Tree with Small Distances(cf1029E)(树形动规)

    You are given an undirected tree consisting of \(n\) vertices. An undirected tree is a connected und ...

  7. 洛谷 P2986 [USACO10MAR]伟大的奶牛聚集(树形动规)

    题目描述 Bessie is planning the annual Great Cow Gathering for cows all across the country and, of cours ...

  8. 洛谷 P2899 [USACO08JAN]手机网络Cell Phone Network(树形动规)

    题目描述 Farmer John has decided to give each of his cows a cell phone in hopes to encourage their socia ...

  9. P2014 选课 (树形动规)

    题目描述 在大学里每个学生,为了达到一定的学分,必须从很多课程里选择一些课程来学习,在课程里有些课程必须在某些课程之前学习,如高等数学总是在其它课程之前学习.现在有N门功课,每门课有个学分,每门课有一 ...

随机推荐

  1. C语言总结

    我们用了20天的时间左右的时间来学习简单的C语言,对于C语言,总体来说我是学的不是特别透彻,感觉自己什么都不懂一样.明天就要考试了,希望明天考个好成绩,为明年打下一个良好的基础. 这段时间我们学习了: ...

  2. 【原创】NuGet 出现“无法初始化 PowerShell 主机,如果将你的 PowerShell 执行策略设置设置为 AllSigned ,请先打开程序包管理控制台以初始化该主机” 错误的解决方法

    现象: 网上的设置 AllSigned 等方法都无效..后来考虑可能跟命令行版本兼容性有关系,然后在注册表命令行配置里发现一 ForceV2 设置项,抱着试一试的心态改了下,果然解决了! 解决方法:修 ...

  3. BZOJ 1062: [NOI2008]糖果雨(二维树状数组)

    首先嘛,这道题是非同一般的恶心= = 然后首先膜拜一下CDQ大神ORZ在考场上A了这道题ORZ 这道题看到的话,我是先想把云朵化成在0s时的位置,但很容易发现这样只能单点查询而不能查询整段 结果只能膜 ...

  4. USTC 1119 graph 图的同构

    USTC 1119 图的同构的严格定义可以参考离散数学:The simple graphs G1=(V1,E1) and G2=(V2,E2)are isomorphic if there exist ...

  5. JQUERY写大图轮播;附jquery的hover()方法、animate()方法、find()方法

    思想:黑框设置超出部分隐藏. 红框往左移动,通过判断红框左边框距离黑框左边框的像素值,来实现红框的移动. 绿框在最上层,放每张图片的说明和序号. 一:html部分(大框.图片部分.箭头部分.图片介绍部 ...

  6. 项目架构开发:数据访问层之UnitOfWork

    接上文 项目架构开发:数据访问层之IQuery 本章我们继续IUnitOfWork的开发,从之前的IRepository接口中就可以看出,我们并没有处理单元事务, 数据CUD每次都是立即执行的,这样有 ...

  7. 读阮一峰对《javascript语言精粹》的笔记,我有疑问。

    <javascript语言精粹>是一本很棒的书籍,其中作者在附录列出了12种他所认为的javascript语言中的糟粕. 我最近开始跟读前端前辈的博客,其中读到了阮一峰的<12种不宜 ...

  8. Swift应用案例 1.无限轮播

      从今天开始,我学习的重点开始转向Swift,并且会分享一些自己学习的心得体会,今天给大家带来的的是无限轮播.广告页的无限轮播是非常常见的一个功能,大多数APP都有,大多数程序员也都实现过,今天我们 ...

  9. 我在ubuntu桌面系统下进行WEB开发常用的软件

    公司电脑本来是win系统的,不知道怎么突然中毒了,由于比较讨厌杀毒软件,所以之前都被我卸载掉了,所以我干脆重装了一个ubuntu系统 1.IDE    vscode 各种插件,自带Git,markdo ...

  10. 关于label和input对齐的那些事

    input文本和label对齐 默认状态下,也就是下面这样, 文字和input是居中的. <div> <label>我是中国人</label> <input ...