摘要:
"题目链接" Solution 线段树是一门比较***钻的手艺... 此题我们需要维护 $4$ 个变量: 1. $amx$ 代表当前节点的最大值. 2. $lmx$ 代表当前节点以左端点为起点的区间最大值. 3. $rmx$ 代表当前节点以右端点为结尾的区间最大值. 4. $sum$ 代表整段的和. 然 阅读全文
摘要:
"题目链接" Solution 此题,用到的结论都是比较浅显的,但是,我竟然没想到反过来枚举... 只有50分... 被自己蠢哭... 结论比较浅显: 1.对于两个正整数$a$,$b$,设 $gcd(a,b)=k$,则存在$gcd(a/k,b/k)=1$. 也就是说 $x=k_1 a_1$,$a_0 阅读全文
摘要:
"题目链接" Solution 分层图+$SPFA$。 建立3层图,其中每一层之中的边权赋为0. 对于任意一条边 $t$ ,其起点 $x$ 和终点 $y$. 我们将 $x$ 在第一层的节点连向 $y$ 的第二层节点,边权为 $w[x]$. 代表在 $x$ 买了这个东西. 然后将 $x$ 在第二层的节 阅读全文
摘要:
"题目链接" Solution 这道题,调了我一晚上... 一直80分 _ 所以我们先枚举断开直径上的边,然后分别找到断开后两棵子树的直径. 接着我们讨论 $dis_1,dis_2$ 最优情况. 1. 其 $dis$ 为其到子树直径较远的一端. 2. 如果 $x_1,x_2$ 在子树的直径上,那么显 阅读全文
摘要:
"题目链接" Solution 我们直接找到一条直径 $s$,起点为 $begin$,终点为 $end$. 从前往后遍历点 $u$ ,若子树中最大的距离与 $dis(u,begin)$ 相等. 很显然这个点不在公共线段上,很显然可以用子树的中的一段接上,形成一条新的直径. 然后从后往前遍历,同样的道 阅读全文
摘要:
"题目链接" Solution 同 $NOIP2007$ 树网的核 . 令 $dist_u$ 为以 $u$ 为根节点的子树中与 $u$ 的最大距离. $~~~~dis_u$ 为 $u$ 到直径中没有包括区间的一端的距离. $~~~~s$ 为直径. 题意很明确,要求直径上的一段区间使得 $Max(di 阅读全文
摘要:
"题目链接" Solution 二分答案+并查集. 由于考虑到是要求花费的最小值,直接考虑到二分. 然后对于每一个二分出来的答案,模拟 $Kruskal$ 的过程再做一遍连边. 同时用并查集维护联通块信息. 最后看连的边数以及$1$边是否满足要求即可. Code cpp include using 阅读全文
摘要:
"题目链接" Solution 好题. 一开始一直在想怎么蛇皮建图,但是发现一直蛇不出来... 正解是用类似于 dijkstra 的算法对所有点进行松弛. 对于每个元素记录两个值: $cost$ 代表它的最小花费. $ans$ 代表它的方案数. 同时用一个$f_{i,j}$记录第$i$种和第$j$种 阅读全文
摘要:
"题目链接" 大致题意 给你 $n$ 个字符串, 要求你给出最小的代价. 对于每个字符串: 1.如果它的后缀在它之后,那么代价为 $n^2$. 2.如果一个字符串没有后缀,那么代价为 $x$, $x$是它所处的位置. 3.如果字符串前面有它的后缀且位置为 $y$,那么代价为 $x y$. Solut 阅读全文
摘要:
"题目链接" Solution Trie 树水题。 直接将前面所有字符串压入Trie 中. 在查询统计路上所有 有单词的地方 和最后一个地方以下的 单词数 即可. Code cpp include using namespace std; const int maxn=500005; int ch[ 阅读全文