题目简述:给定一棵$N \leq 10^5$个节点的树,边上带权,维护以下两个操作: 1. 修改一条边的边权: 2. 询问当前树的直径长度. 解1:code 注意到树的直径有以下性质: 定理:令$\text{farthest}(x)$表示与节点$x$距离最远的节点的集合.则对任意节点$x$,都有任意$a \in \text{farthest}(x)$与$b \in \text{farthest}(a)$,$a$与$b$的距离即为直径. 我们任选一个节点$r$作为树的根,任意边$(x, y)$,若…
P6845 [CEOI2019] Dynamic Diameter 题意 一颗带权树,每次更改一条边的权,每次修改后求出最大直径.强制在线. 思路 \(O(n\log^2n)\) 的暴力做法. 根据经典结论,对于两个点集的树上最大直径(权值非负),并集点集的树上最大直径的端点一定是原四个端点中的两个. 那么我们就可以用线段树维护点集,合并时 \(O(\log n)\) 查询两点间距离合并就可以做到 \(O(n\log^2n)\) 的复杂度了. 思考如何支持在线修改边权.两点间距离为 \(dis(…
Expected diameter of a tree 我们先两次dfs计算出每个点能到达最远点的距离. 暴力计算两棵树x, y连边直径的期望很好求, 我们假设SZ(x) < SZ(y) 我们枚举 x 的每个端点, 二分找到分界点, 复杂度为SZ(x) * log(SZ(y)) 其实我们对于每次询问我们记忆化一下就可以啦. 这是因为对于SZ(x)小于 sqrt(n)的询问, 我们直接暴力求就好啦, 复杂度q * SZ(x) * log(SZ(y)) 对于SZ(x) > sqrt(n) 这样的…
Minimal Diameter Forest 首先我们找出每个连通块中的特殊点, 特殊点的定义是到各种个连通块中距离的最大值最小的点, 每个连通块肯定通过特殊点连到其他连通块, 我们把有最大值的特殊点当作根, 然后其他点直接接在这个点中, 形成菊花图. #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<…
D. Expected diameter of a tree time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output Pasha is a good student and one of MoJaK's best friends. He always have a problem to think about. Today they…
[题目链接] http://codeforces.com/contest/804/problem/D [题目大意] 给你一个森林,每次询问给出u,v, 从u所在连通块中随机选出一个点与v所在连通块中随机选出一个点相连, 问你此时相连出的树的直径期望是多少?(如果本身就在同一个连通块内,则输出-1) [题解] 我们利用树形dp记录每个点属于的连通块, 以及每个点到不同分支最远点的距离,记为mxd[i] 一遍搜索计算出向下最远,再次搜索的时候得到向上最远即可. 得到各个分支的最远距离之后,我们将其进…
题目链接 Expected diameter of a tree 题目意思就是给出一片森林, 若把任意两棵树合并(合并方法为在两个树上各自任选一点然后连一条新的边) 求这棵新的树的树的直径的期望长度. 我们对每棵独立的树,对于这棵树的每一个点$u$,求出$f[u]$ $f[u]$为这棵树上离$u$最远的点到$u$的距离. 同时我们求出每棵树上的树的直径的长度 现在合并两棵树$A$和$B$的时候,合成的新的树的直径$C$其实有三种情况. 对$A$树中的某点$x$,$B$树中的某点$y$ 1.可能是…
<题目链接> 题目大意:给你一些点的最大度数,让你构造一张图,使得该图的直径最长,输出对应直径以及所有的边. 解题分析:一道比较暴力的构造题,首先,我们贪心的想,要使图的直径最长,肯定是尽可能的将所有的顶点连在同一条链上,并且,所有度数为1的点都只能作为最外围的点.所以,基本思想就是先将两个度为1的顶点放在链的两端(如果有的话),然后所有度>=2的点放在链的中间,建好链之后,再将多余的度为1的点挂在链上最大度数未满的点上. #include <bits/stdc++.h> u…
题意: 给出一个森林,有若干询问\(u, v\): 从\(u, v\)中所在子树中随机各选一个点连起来,构成一棵新树,求新树直径的期望. 分析: 回顾一下和树的直径有关的东西: 求树的直径 从树的任意一点出发搜到最远的一点\(x\),再从\(x\)出发搜到距\(x\)最远的一点\(y\),那么\(d(x,y)\)就是树的直径.时间复杂度为\(O(n)\). 求构成新树的直径 假设原来两棵树的直径分别问\(d_1,d_2\) 令\(f_i\)为点\(i\)所在子树中距它最远的点的距离 新树的直径要…
题意:给你一颗树,每次会修改一条边的边权,问修改之后的树的直径是多少? 思路:来源于:https://www.cnblogs.com/TinyWong/p/11260601.html 得到树的全序dfs序之后,我们考虑用线段树维护x - 2 * y + z.维护方法和2017, 2016那道题差不多,对于每个区间维护:x, -y, z, x - 2 * y, -2 * y + z, x - 2 * y + z6个部分的最大值,然后区间合并. 代码: #include <bits/stdc++.h…
    A CodeForces 807A Is it rated?     B CodeForces 807B T-Shirt Hunt     C CodeForces 807C Success Rate     D CodeForces 807D Dynamic Problem Scoring     E CodeForces 807E Prairie Partition 点击题号进入题面 --------- 新笔记本终于到了,可以愉快的写代码了.. ------ A 807A 题意: 给…
鉴于某些原因(主要是懒)就不一题一题写了,代码直接去\(OJ\)上看吧 CodeChef Making Change 传送门 完全没看懂题解在讲什么(一定是因为题解公式打崩的原因才不是曲明英语太差呢--) 由于\(C=\sum x_i\times a_i\),我们可以把\(x_i\)给二进制分解,然后依次考虑每一位 设\(f_{i,j}\)表示考虑到\(C\)的二进制第\(i\)位,且\(0\)到\(i-1\)位都已经对上,进位为\(j\)的方案数,那么考虑所有\(x_i\)当前这一位,每一个\…
每日CF: 411div2 Solved A CodeForces 805A Fake NP Solved B CodeForces 805B 3-palindrome Solved C CodeForces 805C Find Amir Solved D CodeForces 805D Minimum number of steps Attempted E CodeForces 805E Ice cream coloring     F CodeForces 805F Expected dia…
在今天三黑(恶意评分刷上去的那种)两紫的智推中,突然出现了P3834 [模板]可持久化线段树 1(主席树)就突然有了不详的预感2333 果然...然后我gg了!被大佬虐了! hdu 2665 Kth number 题意就不写了,太经典了(可我还是不会这题,我太菜了) 大佬的题解写的太神仙了,我这么菜的人都看懂了2333,所以我就不写了... 不过这题是真的坑啊...老师在上面讲的时候,我们开始提交(他们交主席树,我交整体二分)然后等讲完我们还没过23333 MLE.TLE.WA(可能还有CE)轮…
地址:http://codeforces.com/contest/807/problem/D 题目: D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya and Petya take part in a Codeforces round. The round las…
D. Maximum Diameter Graph 题目链接:https://codeforces.com/contest/1082/problem/D 题意: 给出n个点的最大入度数,要求添加边构成一个无环无向无重边的图,并且最大化图中的最短路径. 题解: 要求最短路径最大,我们会想到把每一个允许入度可以大于1的点先连起来,形成一个”链“,当前肯定满足条件,并且两端点的最短路径长度是所有情况中最大的. 然后对于入度为1的点,先尽量考虑放在链的两端,然后再在中间随便插入. 代码如下: 先附上自己…
D. Dynamic Problem Scoring time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Vasya and Petya take part in a Codeforces round. The round lasts for two hours and contains five problems. For th…
D. Maximum Diameter Graph time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Graph constructive problems are back! This time the graph you are asked to build should match the following proper…
Dynamic Problem Scoring 思路: 水题: 代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; #define maxn 130 ],ac[],cnt,all,last1,last2; ][]; inline void in(int &now) { ;now=; char Cge…
[题目链接]:http://codeforces.com/contest/807/problem/D [题意] 给出n个人的比赛信息; 5道题 每道题,或是没被解决->用-1表示; 或者给出解题的所用的时间; (每道题的分数与解决率有关,越高,分越低); 然后有个人想利用这个特点,注册很多个账号; 试图改变每道题的解决率,以期让自己的分数大于某个人; 如果这个人没有解决某道题的话; 那些新加入的人也不能解决那道题. 问最少需要注册多少个账号才能让你的分数大于某个人; [题解] 顺序枚举加入了多少…
题目链接:http://codeforces.com/contest/807/problem/D 题意:对于动态计分的 Codeforces Round ,已知每题的 score 是根据 Round 参加人数和该题过题人数计算,两者之比结合上图得出该题的分数.某人在该题的得分为 score*(1−t/250) 其中 t 表示通过该题的时间. 已知参加该场比赛的所有参加者的过题情况(包括 Vasya 和 Petya),问如何通过增加新的参赛者(尽量少),使得 Vasya 的最终得分高于 Petya…
D. Maximum Diameter Graph time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Graph constructive problems are back! This time the graph you are asked to build should match the following properties…
Codeforces 题目传送门 & 洛谷题目传送门 *3400 的毒瘤 H 题,特意写个题解纪念一下( 首先对于这种数据结构不太好直接维护的东东可以考虑分块.然鹅我除了分块其他啥也没想到 我们设一个阈值 \(B\),每 \(B\) 个元素分为一块. 我们知道两点之间的 LCA 的大体思想肯定是暴力跳祖先,直到两点重合为止.不过由于此题修改操作的特殊性,什么倍增.树剖都萎掉了. 于是我们考虑一个大致思路:整块暴力跳,散块直接找祖先. 具体来说,我们设 \(pre_i\) 为 \(i\) 的祖先中…
题目大意:给出一个森林,每次询问给出u,v,问从u所在连通块中随机选出一个点与v所在连通块中随机选出一个点相连,连出的树的直径期望(不是树输出-1).(n,q<=10^5) 解法:预处理出各连通块的直径和各点到连通块内一点的最远距离d[x](树形dp+换根),询问若在同一块内输出-1,否则若随机选出两点x,y,直径为max(d[x]+d[y]+1,x所在块直径,y所在块直径),我们把同一连通块内的d排序,枚举小的连通块中的d,到大的连通块中二分d[x]+d[y]+1<=max(x所在块直径,y…
大意: n结点有向有权图, m个操作, 增加若干边的权重或询问源点为1的单源最短路. 本题一个特殊点在于每次只增加边权, 并且边权增加值很小, 询问量也很小. 我们可以用johnson的思想, 转化为差值最短路, 这样边权就在n-1以内, 可以直接暴力跑桶优化dijkstra. #include <iostream> #include <algorithm> #include <cstdio> #include <math.h> #include <s…
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 统计叶子节点个数m 把每条和叶子节点相邻的边权设置成s/cnt就可以了 这样答案就是2*s/m(直径最后肯定是从一个叶子节点开始,到另外一个叶子节点结束) 证明: 设dis(i,j)表示节点i和节点j之间的权值和 设a[1],a[2]..a[m]是m个叶子节点 则 \(max(dis(a[i],a[j])) >= ∑\frac{dis(a[i],a[j]) }{ \frac{m*(m-1)}{2|} }\) 即\(\frac{m*(m-1…
题目链接~~> 做题感悟:越来越感觉CF的题非常好,非常有深度. 解题思路: 这题须要注意 k 的大小.由于 k 仅仅有 30 个,终于形成的点的直径一定是某个确定的值,所以我们能够枚举这个值.然后把大于这个值的边都取消(删除不大于k 个点),这样不断二分剩下点的最小直径.每次二分的时候推断是否合法. 这里推断是否合法非常重要.由于这须要用dfs去枚举,一不小心就会超时.dfs 在枚举删除每一个点的时候主要枚举两个方面.(1)假设想删除与当前点相连的全部边,能够选择删除全部与之相连的点 (2)能…
题目传送门 题意:现在有n个点,每个点的度数最大为di,现在要求你构成一棵树,求直径最长. 题解:把所有度数为2的点先扣出来,这些就是这颗树的主干,也就是最长的距离. 然后我们把度数为2的点连起来,之后就处理1的点,先在主干的最左边和最右边加上新的点,这样可以使得直径边长. 然后其他的点随便放就好了. 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt","…
题意 大家都是优秀生,这点英文还是看得懂的:点此看题 题解 由于旅行路线成一个环,所以从哪里出发不重要,我们把景点按照 a i a_i ai​ 排序,不妨就从左边最小的出发.基础的旅行费用 c i c_i ci​ 是都要算上的,我们的目的是最小化额外的费用 ∑ max ⁡ ( 0 , ( a j − a i ) − c j ) \sum\max(0,(a_j-a_i)-c_j) ∑max(0,(aj​−ai​)−cj​) . 很明显有一部分的景点是回程(从大到小飞回起点)的时候经过的,这些景点一…
A.Anton and Danik Problems: 给你长度为N的,只含'A','D'的序列,统计并输出何者出现的较多,相同为"Friendship" Analysis: lucky_ji: 水题,模拟统计A和D的数目比较大小输出结果即可 Tags: Implementation B.Anton and Digits Problems: 给定k2个2,k3个3,k5个5及k6个6,可以组成若干个32或256,求所有方案中Sigma的最大值 Analysis: lucky_ji: 同…