摘要:
解决可带权树上简单路径统计问题 其精髓在于把无根树平均地分割成若干互不影响的子问题求解,极大降低了时间复杂度,是一种巧妙的暴力。 例: 模板给定一棵树(无根树)和一个整数 k ,求树上等于 k 的路径有多少条? (存在) 枚举不同的两个点,然后dfs算出ta们间的距离,统计一下就行了 大概是 O 阅读全文
摘要:
题目:给定一棵 N 个点的无向树,边有边权,求树上任意两点间的距离和,答案对 1e9+7 取模。 题解:依题可知,这道题所求即Σi=1n−1Σj=i+1ndist(i,j),枚举树上任意两点并计算距离的复杂度要达到 O(n2logn),时间难以承受。 可以换一种方式思考,由于任意两点的距离都是答案贡 阅读全文
摘要:
树上差分 松鼠的新家 很显然的 起点+1,终点+1,然后lca和 fa[lca] 都减 1 最后统计答案时 因为终点被重复算了两次 ,所以要减1 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> 阅读全文
摘要:
最小生成树 Kruskal: 适用稀疏图,\(O(mlogm+ma(n))\) $a(n)$是一次并查集的复杂度,更快,更常用 把边按照权值进行排序,用贪心的思想优先选取权值较小的边,并依次连接,若出现环则跳过此边(并查集来判断是否存在环)继续搜,直到已经使用的边的数量比总点数少一即可。 #incl 阅读全文
摘要:
0/1分数规划 0/1分数规划 给定一些物品,每个物品有 a[i],b[i] ,要求选 k 个,最大化 (∑ a[i])/(∑b[i]) 。 二分,判定答案是否能 ≥mid 。 那么即 (∑a[i])/(∑b[i])≥mid ,也即 ∑a[i]-mid×b[i] ≥0 。 将物品按照 a[i]-mi 阅读全文
摘要:
T1 啊?60改成20???啊啊啊 60 #include <iostream> #include <cstdio> #include <cstring> using namespace std; const int N=1000005; const int mod=1000000007; int 阅读全文