
DSU on tree
moomhxy
你若是天才,我便是疯子
展开
-
CF600E Lomsat gelral 树上启发式合并
题目链接:https://www.luogu.com.cn/problem/CF600E 题意:一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和。 思路:我们首先处理出每个结点的重链,然后每次先处理轻链,计算贡献,然后再消去贡献,当最后处理到重链时 保留贡献,就这样启发式地合并,可以将复杂度降到nlogn。 #include<bits/stdc++.h> using namespace std; typedef long long ll; #d.原创 2020-06-22 21:29:46 · 239 阅读 · 0 评论 -
牛客网 月出皎兮,佼人僚兮。 树上启发式合并
题目链接:https://ac.nowcoder.com/acm/contest/6037/F 题意:给一棵树有n个节点,根节点为1。每个点有一个颜色,并且有一个权值,为当前这个节点颜色的数量。 对每个点输出,当前点以及子树中的最大匹配数。当且仅当颜色不同可以匹配。 思路:记录每个子树的所有颜色数量sum和以及最多的那个种类的颜色个数max,如果max大于sum/2,那么说明 最多只能有sum - max对能够匹配,否则的话说明可以将其都两两配对。 #include<bits/stdc++.h&g原创 2020-06-22 21:23:53 · 234 阅读 · 0 评论 -
洛谷U41492 树上数颜色 树上启发式合并
题目链接:https://www.luogu.com.cn/problem/U41492 题意:给一棵根为1的树,每次询问子树颜色种类数 思路:树上启发式合并,每次计算时如果是第一次出现就计算贡献,轻链的话要消除贡献 #include<bits/stdc++.h> using namespace std; typedef long long ll; #define fi first #define se second #define ls rt << 1 #define rs .原创 2020-06-22 21:17:31 · 408 阅读 · 0 评论