算法
文章平均质量分 55
蛀牙牙乐
这个作者很懒,什么都没留下…
展开
-
二分刷题记录(洛谷题单)区间的甄别
二分原创 2022-05-31 22:39:52 · 177 阅读 · 0 评论 -
倍增 LCA(最近公共祖先)
待添原创 2022-05-28 10:56:21 · 197 阅读 · 0 评论 -
区间问题 (持续)
待续原创 2022-05-18 10:24:24 · 108 阅读 · 0 评论 -
最小生成树 解释 + 板子题
最小生成树基础原创 2022-05-12 10:05:09 · 105 阅读 · 0 评论 -
二叉树 天梯赛 图文解释 + 相似题
我真的很讨厌二叉树,递归是我永远的痛 树的遍历 看图 推荐第二种(实际没区别,就是写得少点第二种,不麻烦 ) int mx = 0; void build(int l, int r, int root, int idx){ mx = max(mx, idx); ans[idx] = aft[root];//由性质或图得,根结点的来源是后序 if(l == r) return; int i = l; while(i < r &&原创 2022-04-18 22:28:52 · 933 阅读 · 0 评论 -
4.15 最短路 题
青蛙 思路:单源最短路,两两之间取max floyd //5552ms pair<int, int> p[210]; double dist[210][210]; int t; int pre[210]; int main() { IOS; int cnt = 1; while (cin >> t && t) { re(p); re(dist); re(pre); for (int i = 1; i <= t; ++i) cin原创 2022-04-15 21:12:39 · 68 阅读 · 0 评论 -
4.15 最短路总结
先总结吧 学习链接 Floyd 任意两个结点之间的最短路 我觉得像dp //自己到自己标为0或1, 没有通路为∞ for (int k = 1; k <= n; ++k){//是否经过k的最短路 for(int i = 1; i <= n; ++i){ for (int j = 1; j <=n; ++j){ map[i][j] = min(map[i][j], map[i][k] + map[k]转载 2022-04-15 12:38:10 · 87 阅读 · 0 评论 -
dfs例子
双端队列bfs: w = 0放头, w = 1放尾(类似与dp) DFS 小技巧 while(cin >> ch) 一般枚举所有的两种方案dfs (2^n)**/ ** 二进制(n * 2^n) 看第 i 位是不是1,可以右移 i 位再 &1 看 u >> i & 1 (要从0开始枚举) 如果需要拼接: dfs 能剪枝的就把它先剪了(在确认没错的情况下) 找区间: ret += upper_bound(a.begin(), a.end(), 3 * a[j]原创 2022-04-07 10:59:16 · 577 阅读 · 0 评论 -
差分介绍 + 题
让求某一区间的和,那么前缀和也同样能够完成,但是如果操作的次数过大 那么前缀和显然会超时,但是同样有解决的方式例如 树状数组,线段树。 顾名思义, ` sum[i] = a[i] - a[i - 1];` sum[l] += val; sum[r + 1] -= val; (这里取决于具体情况,但一般是这个) (我记得有个图, 找不到了) ---------------------------------------------------- ^ ^ | | .原创 2022-01-04 17:34:29 · 461 阅读 · 0 评论