上一页 1 2 3 4 5 6 7 8 ··· 13 下一页
摘要: Floyd算法深刻理解 最开始只允许经过1号顶点进行中转,接下来只允许经过1和2号顶点进行中转……允许经过1~n号所有顶点进行中转,求任意两点之间的最短路程。用一句话概括就是:从i号顶点到j号顶点只经过前k号点的最短路程。 因为给的时间是不下降的序列,所以肯定要从第一个村庄开始修路,这样用时间来判断 阅读全文
posted @ 2020-06-21 17:45 lukelmouse 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 分成两部 求出树的重心 用$BFS$ 求出所有点到重心的距离 #include <bits/stdc++.h> using namespace std; const int N = 5e4 + 10; int e[N*2],ne[N*2],h[N],idx,rt,mds[N],ds[N],n,sum 阅读全文
posted @ 2020-06-21 11:53 lukelmouse 阅读(66) 评论(0) 推荐(0) 编辑
摘要: 求重心的本质,其实就是枚举每一个节点的所有子树,使得该节点中的最大子树最小化。 #include <iostream> #include <cstring> using namespace std; const int N = 2e5 + 10; int e[N],h[N],ne[N],mds[N] 阅读全文
posted @ 2020-06-21 11:33 lukelmouse 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 树的直径 $dfs1$求直径的一端点 $dfs2$求整个直径的长度,并保存下直径上的所有点 然后$for$一边 \(f\) 数组(保存下来的点),求出中点 $dfs3$用$mid$为根来统计所有节点的深度,并算出每个节点能到达的最大深度 然后求出相对深度,排序之后,前$ k$ 个 即满足题目要求,输 阅读全文
posted @ 2020-06-19 15:43 lukelmouse 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 两次$DFS$ \(O(n)\) 第一次随机从一个点出发,寻找距离当前点,最远的一个叶子节点,命名为$pos$ 然后从 \(pos\) 出发,寻找距离$pos$ 最远的一个叶子节点,这段距离就是树的直径 #include <bits/stdc++.h> using namespace std; co 阅读全文
posted @ 2020-06-18 23:05 lukelmouse 阅读(90) 评论(0) 推荐(0) 编辑
摘要: 题目是一颗生成树,所以路径唯一 树上只有两种颜色,如果客人在经过的路径上有自己喜欢的颜色,则输出 1,否则输出 0 可以用并查集来把相同的颜色合并起来。 \(a,b\) 颜色相同,\(col[a]!=c\) 路上全是客人不喜欢的颜色,输出 0 \(a,b\) 颜色相同,\(col[a]==c\) , 阅读全文
posted @ 2020-06-17 01:55 lukelmouse 阅读(64) 评论(0) 推荐(0) 编辑
摘要: A 模拟 一只猫初始在$(x,y)$,给你$a,b,c,d$表示上下左右的移动次数,你能以任意次序移动,同一个点可以重复经过 有一个矩形,猫的运动不能超过矩形的边界,问你是否可以实现一条可能的路径使得猫在矩形范围内移动完所有步骤 猫猫最后的点一定是$x+b a,y+d c$,只要判断它是否在矩形边界 阅读全文
posted @ 2020-04-06 01:03 lukelmouse 阅读(110) 评论(0) 推荐(0) 编辑
摘要: "学习视频" $O(n)$ 求最长回文字符串 1.将原字符串转化 记得$ms,mp$的长度要开到原数组的两倍 $s$数组为字符串,$ms$为转化后的字符串 在$0$位置插入边界$\$$,在结尾位置插入$0$ 其他情况,每个原字符串中的字母都用两个$\ $来包围 模板题 "POJ 3974" 阅读全文
posted @ 2020-03-30 17:40 lukelmouse 阅读(86) 评论(0) 推荐(0) 编辑
摘要: 算法步骤 时间复杂度 \(O((n+q)\log n)\),$n$是问题规模,$q$是询问个数 倍增法求$LCA$ $fa[i,j]$表示从$i$开始向上走$2j$所能到达的节点 \((0 \leq j\leq\log n)\) $depth[i]$表示节点$i$的深度 哨兵:如果从$i$开始跳$2 阅读全文
posted @ 2020-03-29 20:38 lukelmouse 阅读(127) 评论(0) 推荐(0) 编辑
摘要: A "Divisibility Problem" 题意 给你两个正整数$a,b$ 你每次可以执行一次$a++$操作,问你最小的操作步数,使得$a$能被$b$整除 思路 数学 分情况讨论 当$ab$ 时,只要把$a$调整到离$kb$最近的一个$b$的倍数,即$\lceil {a / b}\rceil 阅读全文
posted @ 2020-03-27 09:45 lukelmouse 阅读(333) 评论(3) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 13 下一页