[atARC103F]Distance Sums】的更多相关文章

给定$n$个数$d_{i}$,构造一棵$n$个点的树使得$\forall 1\le i\le n,\sum_{j=1}^{n}dist(i,j)=d_{i}$ 其中$dist(i,j)$表示$i$到$j$的路径上所经过的边数,若无解输出-1 $2\le n\le 10^{5}$,$1\le d_{i}\le 10^{12}$,保证$d_{i}$各不相同 1 #include<bits/stdc++.h> 2 using namespace std; 3 #define N 100005 4 #…
「ARC103D」 Distance Sums 传送门 水题. 首先如果让你求树上的节点 \(i\) 到其它所有节点的距离和,这是非常简单的,这就是非常常规的换根 \(\texttt{DP}\). 那么,我们可以观察一下这个答案的递推式:\(f_u=f_{fa_u}-siz_u+(n-siz_u)\). 也就是说,如果我们确定了 \(f_u\),那么我们可以确定 \(f_{fa_u}\) 的值. 又根据递推式,我们可以考虑这样的一种构造方式: 首先将 \(f\) 从大到小排序,如果当前 \(f\…
题意:有一棵树,对于每个点$i$,给出了它到其他点的距离和$i$,现在要还原这棵树,保证$d_i$两两不同 一个点从$u$移到相邻节点$v$时,若删掉$(u,v)$后$u$这边的连通块大小为$siz_u$,$v$这边的连通块大小为$siz_v$,那么$d_v=d_u-siz_v+siz_u$ 首先,有最大$d_x$的$x$是叶子,并且我们知道它的父亲的$d$为$d_x-(n-1)+1$ 所以考虑按$d$从大到小的顺序确定每个点$x$的父亲:这个点的$d$必须是$d_x-(n-siz_x)+siz…
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j (i ≤ j), inclusive. Note:A naive algorithm of O(n2) is trivial.…
最近感觉自己思维僵化,啥都不会做了-- ARC103 F Distance Sums 题意 给定第 \(i\) 个点到所有点的距离和 \(D_i\) ,要求构造一棵合法的树.满足第 \(i\) 个点到其他所有点的距离和为 \(D_i\) . \(n \le 10^5\) . 技巧 寻找特殊的量,推出整个树的形态 题解 题解 整棵树里头,最为特殊的点有两类.一个是重心,这是距离和最小的点,另一个是叶子节点,这是距离和最大的节点.考虑如果我们先确定重心,那么接着就不大好往下推了,因为我们并不知道子树…
C - //// 为了防止一些多余的判断,我选择直接记录每个数的个数,然后枚举第一个数,找第一个数之外第二个数改变最少的情况下应该选什么 代码 #include <bits/stdc++.h> #define fi first #define se second #define pii pair<int,int> #define mp make_pair #define pb push_back #define enter putchar('\n') #define space p…
目录 ARC 103 A.//// B.Robot Arms C.Tr/ee D.Distance Sums ARC 103 窝是传送门QwQ A.//// 题意 : 给你\(n\)(\(n\)为偶数)个数 一次操作你可以修改任意一个数 问最少修改几次使得其满足以下条件 \(a_i=a_{i+2}\) \(a_1!=a_2\) 数据约束: \(2 \leq n \leq 10^5\) , \(1 \leq a_i \leq 10^5\) 题解: 对于下标为奇数的记下每个数出现的个数 在满足和偶数…
传送门 C - /\/\/\/ 题意: 给出一个序列\(\{a_i\}\),先要求其满足以下条件: \(a_i=a_{i+2}\) 共有两个不同的数 你现在可以修改任意个数,现问最少修改个数为多少. 思路: 很明显奇偶分类. 记录奇数位置.偶数位置的最大值和最大出现次数的情况: 因为要求两个数不相同,所以还要维护次大. 注意以下细节就是了. Code #include <bits/stdc++.h> using namespace std; typedef long long ll; cons…
Given an integer array nums, return the number of range sums that lie in [lower, upper] inclusive.Range sum S(i, j) is defined as the sum of the elements in nums between indices i and j (i ≤ j), inclusive. Note:A naive algorithm of O(n2) is trivial.…
ARC103E Tr/ee 首先没有叶子显然不科学,\(s_n\)是1也不怎么科学,\(s_i != s_{n-i}\)同样不怎么科学 特判掉上述情况后先把root记为1,链接(root,i+1)如果\(s_i\)就把root改为i+1 理解一下的话就是对于一个这样的结构 如果\(s_i\)就把它做成一颗紫薯 否则一定要去掉这样的结构 就行了 #include<iostream> #include<cstring> #include<cstdio> #include&l…