大江东去,浪淘尽,千古风流人物。故垒西边,人道是,三国周郎赤壁。乱石穿空,惊涛拍岸,卷起千堆雪。江山如画,一时多少豪杰。遥想公瑾当年,小乔初嫁了,雄姿英发。羽扇纶巾,谈笑间,樯橹灰飞烟灭。故国神游,多情应笑我,早生华发。人生如梦,一尊还酹江月。

随笔分类 -  树形结构

摘要:贪心 $O(N^2logn)$很好做,直接暴力断边。 $O(nlogn)$做法 同样考虑贪心,每次往最小的点走一定更优,只不过我们可以在一个环上走一半之后回溯,使得答案更优 我们在 当前点 最近的 还有儿子没走的祖先的 最小的儿子比当前点的儿子小时 就回溯 当然这个回溯的儿子必须在环上,且必须是当前 阅读全文
posted @ 2019-11-14 21:38 White_star 阅读(116) 评论(0) 推荐(0)
摘要:若DP统计答案时是自下而上的,则两个子节点在这个节点统计完答案后就用不上了,所以我们可以设x的dfs序为dfn,左儿子的为dfn+1,右儿子dfn+2。这样计算出的结果除了根节点和少数节点外,其他节点的答案都是错的 适用于只用知道根节点的DP值且从下至上更新答案的情况 具体代码如下 c includ 阅读全文
posted @ 2019-10-22 22:07 White_star 阅读(167) 评论(0) 推荐(1)
摘要:简单构造题 第一道构造题,题目让我们构造一棵树。 其实我们都会构造树,kruskal算法不就构造了一棵树吗? 我们考虑如何构造一棵树,首先数据给出的边必须选,如果给出的这些边已经构成了环,说明无法构成树。 否则我们如果不考虑边的最大/最小条件,我们一定可以构造出一棵树。 但是题目告诉我们一个点相连的 阅读全文
posted @ 2019-10-10 21:35 White_star 阅读(151) 评论(1) 推荐(0)
摘要:算法思路就不说了,其实比较简单 这里讲一下坑点: 1.虽然我们可以将边权压到点上,但是当根不同时,差分数组显然不同。所以我们不能真的将边权看做点权,换根时还是要将其当做边权来考虑。 1.更新时,我们设dp[u]表示u节点为根时的最大价值,由于经过点u后,点v的儿子将变成点u,所以此时我们要更新点v的 阅读全文
posted @ 2019-10-01 21:24 White_star 阅读(177) 评论(0) 推荐(0)
摘要:注意,若负直径指广义的直径——可以缩成一个点,树形DP无法正确求出,需要将初值设为0(若大于0则不更新) 阅读全文
posted @ 2019-09-28 16:08 White_star 阅读(225) 评论(0) 推荐(0)
摘要:提供四种复杂度的做法,希望能帮到大家 $O$($n^3$): c include using namespace std; define go(i,a,b) for(int i=a;i=b; i) define mem(a,b) memset(a,b,sizeof(a)) typedef long 阅读全文
posted @ 2019-08-27 09:33 White_star 阅读(188) 评论(0) 推荐(0)

}