题解 2264: 蓝桥杯2015年第六届真题-生命之树

来看看其他人写的题解吧!要先自己动手做才会有提高哦! 
返回题目 | 我来写题解

筛选

蓝桥杯2015年第六届真题-生命之树

摘要:解题思路:树形dp,查找最大子树和注意事项:集合可以为空,也就是说如果树中节点全小于0则为空集输出0参考代码:#include<bits/stdc++.h> using namespace std;……

蓝桥杯2015年第六届真题-生命之树

#include#includeusingnamespacestd;typedeflonglongll;constintN=100010;intn;llquan[N];//初始输入存放每个点的权值,后续存放以每个节点为根节点时的连通最大权值和vectorlinjie[N];//邻接表llres;//以

蓝桥杯2015年第六届真题-生命之树-题解(C++代码)

这一题我试着将ans初始化为负无穷,或者w1(第一个权值),因为怕所有权值都是负数,但是另ans=0反而满分,而另ans为负无穷却只有79%的分值。大家知道怎么回事吗?解题思路:其实就是无根树转化为有跟树,并且在遍历的时候加入一些判断条件就行注意事项:注意要将ans定义为longlong型参考代码:#

蓝桥杯2015年第六届真题-生命之树-题解(C++代码)

```cpp/*生命之树在X森林里,上帝创建了生命之树。他给每棵树的每个节点(叶子也称为一个节点)上,都标了一个整数,代表这个点的和谐值。上帝要在这棵树内选出一个非空节点集S,使得对于S中的任意两个点a,b,都存在一个点列{a,v1,v2,...,vk,b}使得这个点列中的每个点都是S里面的元素,

蓝桥杯2015年第六届真题-生命之树 (C++代码)

「算法描述」首先我们可以枚举每个点是否在S中,只需要判断S是否是一个连通块就可以了。时间复杂度O(n2^n)期望得分30分。我们把这棵无根树定一个根,将其转为有根树。这样每个点就有了深度。令f_v表示如果v一定在点集S中,且S中的所有点均在v这棵子树中时,S的权值和的最大值。