随笔分类 - { 树算法 { 其他 } }
摘要:把树的结点分块,块内结点连通且个数[b,3b]。 一遍DFS,维护一个栈,设置一个虚拟栈底以保证连通,递归返回时判断栈内元素个数是否大于等于b,是则划分为一个块,最后剩下的与最后一个块划分在一起。 http://blog.csdn.net/popoqqq/article/details/427722
阅读全文
摘要:树的重心即树上某结点,删除该结点后形成的森林中包含结点最多的树的结点数最少。 一个DFS就OK了。。 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 #define MAXN
阅读全文
摘要:一个工人可以变成两个工人,这样可以画出一颗二叉树,那么就是在叶子上建的建筑。 问题的时间花费,可以看作是这颗二叉树中各个叶子的深度*k+叶子对应建筑耗费时间中的最大值。 容易想到,类似哈夫曼树一样,从叶子出发往上合并,直到连通分量数小于等于m,结点的权值设定为w=max(lw,rw)+k。 1 #i
阅读全文