题解:
dsu on tree
dsu on tree的基本步骤就不说了

看到这题询问结点的子树问题,而且询问时离线的,首先想到的dsu on tree的这个trick。
本题的难题就是如何维护结点所有孩子的这个序列。
1.第一个权值插入时,对于整体是没有影响的,(最少需要2个结点才能对其做出贡献)
2.分类讨论权值插入的位置。
设插入的数为xxx
(1).如果插入到第一位(假定编号为yyy)或者最后一位(假定编号为yyy),那么毋庸置疑增加的贡献为(x−y)∗(x−y)(x-y)*(x-y)(x−y)∗(x−y)
(2).如果插入到了中间呢,我们设前面的值为lll,后面的值为rrr,那么贡献则为(l−x)∗(l−x)+(r−x)∗(r−x)−(r−l)∗(r−l)(l-x) *(l-x)+(r-x)*(r-x)-(r-l)*(r-l)(l−x)∗(l−x)+(r−x)∗(r−x)−(r−l)∗(r−l)

对于插入和查询位置的维护,我们可以用一个set来维护即可。

代码:

/*Keep on going Never give up*/
//#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
#define int long long#define endl '\n'
#define Accepted 0
#define AK main()
#define I_can signed
using namespace std;
const int maxn =2e5+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int inf=0x3f3f3f3f;
const ll mod=1e9+7;vector<int> edge[maxn];
vector<pair<int,int> > Q[maxn];
bool visited[maxn];
int a[maxn],sz[maxn],son[maxn];
int ans[maxn];
int sum;
set<int> ss;
void dfs(int x){sz[x]=1;for(auto i:edge[x]){dfs(i);sz[x]+=sz[i];if(sz[son[x]]<sz[i]) son[x]=i;}
}
int flag;
void cal(int x){auto it=ss.lower_bound(x);if(ss.empty()){ss.insert(x);return ;}else if(it==ss.end()){it--;sum+=(x-*it)*(x-*it);ss.insert(x);}else if(it==ss.begin()){sum+=(x-*it)*(x-*it);ss.insert(x);}else{int t=*it;int nx=*--it;sum+=-(t-nx)*(t-nx)+(t-x)*(t-x)+(nx-x)*(nx-x);ss.insert(x);}
}void sol(int x){cal(x);for(auto i:edge[x]){if(i==flag) continue;sol(i);}
}void dsu(int x,int keep){for(auto i:edge[x]){if(i==son[x]) continue;dsu(i,false);}if(son[x]){dsu(son[x],true);flag=son[x];}sol(x);flag=0;ans[x]=sum;if(!keep){sum=0;ss.clear();}}
signed main(){ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);int n;cin>>n;for(int i=2;i<=n;i++){int x;cin>>x;edge[x].push_back(i);}dfs(1);dsu(1,0);for(int i=1;i<=n;i++){cout<<ans[i]<<endl;}}

阔力梯的树(2020 CCPC Wannafly Winter Camp Day2 Div.12 )dsu on tree相关推荐

  1. 2020 CCPC Wannafly Winter Camp Day2 Div.12——A 托米的字符串【构造、数学】

    题目传送门 题目描述 托米有一个字符串,他经常拿出来玩.这天在英语课上,他学习了元音字母 a , e , i , o , u {a,e,i,o,u} a,e,i,o,u 以及半元音 y {y} y . ...

  2. 2020 CCPC Wannafly Winter Camp Day3 部分题解(ACEFG)

    查看题目 A 黑色气球 题意: n个气球,每个气球高度为正整数.给你每两个气球之间的高度和,还原出所有气球的高度,保证答案唯一. 解题思路: 签到题,因为高度的范围不大,直接枚举第一个气球的高度,检测 ...

  3. 2020 CCPC Wannafly Winter Camp Day6 M—自闭——模拟

    链接:https://ac.nowcoder.com/acm/contest/4137/M 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  4. 2020 CCPC Wannafly Winter Camp Day7 K 修炼

    题意: 一个游戏,规则如下: 有六个值 v 1 , v 2 , a 1 , a 2 , b 1 , b 2 v_1,v_2,a_1,a_2,b_1,b_2 v1​,v2​,a1​,a2​,b1​,b2 ...

  5. 牛客 - 阔力梯的树(树上启发式合并)

    题目链接:点击查看 题目大意:给出一棵树,每个节点都有一个编号,现在规定每个节点的"结实程度"为其子树中所有的编号排序后相邻两个数之差的平方和,现在需要求出每个节点的"结 ...

  6. 2020 CCPC Wannafly F.采蘑菇的克拉莉丝(轻重链的应用)

    LINK 首先有一个很nativenativenative的想法 因为一个节点到父亲节点的边是容易统计贡献的,只需要算出不在子树内的蘑菇数量即可 现在只需要统计子树内蘑菇的贡献即可 当vvv节点加上x ...

  7. 2019 CCPC wannfly winter camp Day 5

    C - Division 思路:我们考虑到一点,从大往小取得顺序是不会有问题的,所以可以直接主席树,但是开不下空间,我们可以log分段求. #include<bits/stdc++.h> ...

  8. 2019 wannafly winter camp day5-8代码库

    目录 day5 5H div2 Nested Tree (树形dp) 5F div2 Kropki (状压dp) 5J div1 Special Judge (计算几何) 5I div1 Sortin ...

  9. 2019 CCPC wannfly winter camp Day 8

    E - Souls-like Game 直接线段树合并矩阵会被卡T掉,因为修改的复杂度比询问的复杂度多一个log,所以我们考虑优化修改. 修改的瓶颈在于打lazy的时候, 所以我们预处理出每个修改矩阵 ...

最新文章

  1. Spring Boot中验证码实现kaptcha
  2. Leetcode 622. 设计循环队列 解题思路及C++实现
  3. 2012 人民搜索 实习生招聘 笔试题
  4. 取消堆集以提高延迟并减少AWS账单
  5. vb 通过php连接mysql数据库连接_php连接mysql数据库
  6. layui文件上传 提示 请求上传接口出现异常
  7. linux ifcfg-33 没有eth0解决方法
  8. golang下的rpc框架jsonrpc理解和使用示例
  9. 坚果云 linux 使用方法,Ubuntu坚果云安装与卸载教程
  10. [堆利用:TCache机制]HITB CTF 2018:gundam
  11. PMBOK组织结构及特点-联络员、协调员
  12. 2018下半年Android面试历程
  13. Composite Coloring(思维 数论(筛素数 分解质因数))
  14. mean(求均值),max/min(求最值)
  15. Centos Linux 离线安装 MySQL 5.7、使用MySQL
  16. Book a Trip on Indian Railways
  17. Cesium(5):基于callbackproperty做洪水淹没三维动态分析
  18. java 文件格式解析JSON数据(其二)
  19. windows10下替换记事本中指定字符
  20. 智能AI抢了元宇宙的风头?

热门文章

  1. Pytorch中的数据加载
  2. Node2Vec:万物皆可Embedding
  3. 三维重建新应用:精确还原凶杀现场细节!
  4. YARN-2.7.3-源码分析系列2:启动脚本原理的分析
  5. 破解.NET 2.0配置之谜(一)
  6. 99_leetcode_Best Time to Buy and sell Stock
  7. linux-centos7-yum安装mcrypt**
  8. 使apk具有system权限
  9. Flash(JSFL)
  10. C# 获得系统AppData路径