摘要:
原题链接 题解 先随便找一条直径,然后标记这些边,然后看看直径上的点有没有不需要经过标记边的路径,使得其长度等于该点到直径端点的路径长度 code #include<bits/stdc++.h> #define ll long long using namespace std; struct edg 阅读全文
posted @ 2024-07-15 17:28
纯粹的
阅读(33)
评论(0)
推荐(0)
摘要:
原题链接 题解 由于树上任意一点 \(c\) 到其他点的最大距离 \(= max(dis(c,a),dis(c,b))\),其中 \(ab\) 为直径,易得直径中点该值最小(其他点都要经过中点) 所以两棵树合并要使直径最短,一定是中点相连,但是因为我们只查询直径,所以不需要真的去找中点在哪,只需要维 阅读全文
posted @ 2024-07-15 14:59
纯粹的
阅读(13)
评论(0)
推荐(0)
摘要:
原题链接 题解 题目要求有多少个点,其到标记点的最远距离不超过 \(d\) 看到这个我们不难想到树的直径:设直径端点 \(a,b\),树上任意一点 \(c\) 到叶子节点的距离 \(\leq max(d(c,a),d(c,b))\) 所以,我们把标记点看成叶子节点,并找出相距最远的一对标记点 \(a 阅读全文
posted @ 2024-07-15 14:30
纯粹的
阅读(11)
评论(0)
推荐(0)
摘要:
原题链接 题解 对于区间全部元素 \(+x\) 等价于对 差分数组的 \(d[l]+=x\),\(d[r+1]-=x\) 也就是只修改了两个点 如果存在回文串,要么是 \(s[i]==s[i-1]\) 要么是 \(s[i]==s[i-2]\) ,所以我们可以用 \(set\) 维护23回文串的右端点 阅读全文
posted @ 2024-07-15 13:08
纯粹的
阅读(11)
评论(0)
推荐(0)
摘要:
原题链接 题解 仍然是见微知著,假设已知当前数组及其所有子数组的最小删除个数,这时往数组的前面添加一个元素,则这个数要么被删掉,要么作为领头 code #include<bits/stdc++.h> #define ll long long using namespace std; int a[20 阅读全文
posted @ 2024-07-15 11:47
纯粹的
阅读(22)
评论(0)
推荐(0)

浙公网安备 33010602011771号