摘要:
关于LCA的倍增跟ST的倍增:一个是树上从当前深度往上倍增,倍增上限不超过当前深度,一个是数组中从左往右倍增,倍增上限不超过右边界。 不过在树中倍增要先处理出当前点的深度才能进行倍增,而数组中可以直接根据下标跟有边界的距离计算。 void solve(){ int n, m, root; cin > 阅读全文
摘要:
2次dfs solutions, 仅限边权为非负,或者没有边权(边权为1): void solve(){ int n; cin >> n; vector<vector<pair<int, int>>> al(n + 1); for (int i = 0; i < n - 1; ++i){ int u 阅读全文
摘要:
没有题目链接,上个代码,是为了求解树的重心数量以及节点编号 void solve(){ int n; cin >> n; vector<vector<int>> al(n + 1); for (int i = 1; i < n; ++i){ int u, v; cin >> u >> v; al[u 阅读全文
摘要:
题意:n<=40, m <= 1e18,n个数中,组合的和<=m的组合有多少种。 分析:n是40,双向广搜的思路,压缩搜索范围,分成2个 2^20进行搜索。 再二分查找合法的另一半中的元素数量 void solve(){ long long n, m; cin >> n >> m; vector<l 阅读全文