BZOJ1509 简单 树形DP

来源:互联网 发布:java课程设计题目 编辑:程序博客网 时间:2024/06/02 20:59

老师大人来电让chris的爸妈跑去找chirs,chirs的家在C处,朋友shermie的家在A处,yashiro的家在B处,爸爸妈妈知道shermie和yashiro的家在哪里,所以他们会先去离chirs的家近的朋友家找,再去离得较远的朋友家找。
但是老师大人并不知道A、B、C三个地方在哪里,所以他给你城市的地图(为了防止你不会Tarjan,老师大人已经帮你缩好了点),已知每条路径需要花费的时间,爸爸妈妈进入朋友家中寻找所花的时间忽略不计,问爸爸妈妈找到chirs的最长时间。

感觉上不错的一道题吖?
本来以为想到了一个和题解不同的方法,后来转念一想发现是一样一样的。

因为路径肯定是长这样:

A——————————> (窝什么都不是) —————————>B                ^                ||                ||                 (啊呀向下的箭头不会打吖)                 C

(辣鸡楼主连图都懒得画还跑过来骗访问量)

题解(kb)是这么说的:
找到每一个点与其它任意点的最远距离a、次远距离b、第三远距离c,a+2b+c最长就是解。这个用树形DP往儿子一遍、往父亲一遍,找第二短路和第三短路时避开已确定的子树(语文差别灬我啊)

然后我是这么想的:
找出最长链的,再找出最长链上每一个点不在最长链上的最长路,距离为a,不妨设此节点离最长链的起始点最远,距离为s,离终点的距离为t,那么max(s+2t+a)就是答案。

看上去是有一点区别,然而,s为最远距离,那么t一定就是次远距离,a为第三远距离。没有什么鬼区别啊啊啊啊啊啊啊啊啊啊可能只是我这个好打一点?

原创粉丝点击