Wannafly Camp 2020 Day 2E 阔力梯的树 - set,启发式合并
搞一波启发式合并即可
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define iter set<long long>::iterator
const int N = 100005;
struct myset {
set <int> s;
int ans = 0;
void insert(int x) {
iter p = s.insert(x).first;
iter rb = s.end();
--rb;
if(p!=s.begin() && p!=rb) {
iter pre=p, suf=p;
--pre; ++suf;
ans += x*x*2;
ans += (*pre) * (*suf) * 2;
ans -= x * ((*pre) + (*suf)) * 2;
}
if(p!=s.begin() && p==rb) {
iter pre=p;
--pre;
ans += x*x + (*pre)*(*pre) - 2*x*(*pre);
}
if(p==s.begin() && p!=rb) {
iter suf=p;
++suf;
ans += x*x + (*suf)*(*suf) - 2*x*(*suf);
}
}
void merge(myset *ms) {
for(iter it=ms->s.begin();it!=ms->s.end();it++) {
insert(*it);
}
}
void print() {
for(iter it=s.begin();it!=s.end();it++)
cout<<(*it)<<" ";
}
} buf[N];
myset* merge(myset *s1,myset *s2) {
if(s1->s.size() < s2->s.size()) {
s2->merge(s1);
return s2;
}
else {
s1->merge(s2);
return s1;
}
}
int n,p[N],vis[N],ans[N];
myset *s[N];
vector <int> g[N];
void print() {
for(int i=1;i<=n;i++) {
cout<<"Node "<<i<<": ";
s[i]->print();
cout<<endl;
}
}
void dfs(int p) {
vis[p]=1;
for(int i=0;i<g[p].size();i++) {
int q=g[p][i];
if(vis[q]) continue;
dfs(q);
s[p]=merge(s[p],s[q]);
}
ans[p]=s[p]->ans;
}
signed main() {
ios::sync_with_stdio(false);
cin>>n;
for(int i=1;i<=n;i++) {
s[i]=&buf[i];
s[i]->insert(i);
}
for(int i=2;i<=n;i++) {
cin>>p[i];
g[p[i]].push_back(i);
g[i].push_back(p[i]);
}
dfs(1);
for(int i=1;i<=n;i++) {
cout<<ans[i]<<endl;
}
}
Wannafly Camp 2020 Day 2E 阔力梯的树 - set,启发式合并的更多相关文章
- E、阔力梯的树
题:https://ac.nowcoder.com/acm/contest/4010/E?&headNav=acm 分析:dsu.贪心方法:考虑插入一个值x,对总体贡献,若查找在序列中左边有值 ...
- Wannafly Camp 2020 Day 3I N门问题 - 概率论,扩展中国剩余定理
有一个猜奖者和一个主持人,一共有 \(n\) 扇门,只有一扇门后面有奖,主持人事先知道哪扇门后有奖,而猜奖者不知道.每一轮,猜奖者选择它认为的有奖概率最大(如果有多个最大,随机选一个)的一扇门,主持人 ...
- Wannafly Camp 2020 Day 3F 社团管理 - 决策单调性dp,整体二分
有 \(n\) 个数构成的序列 \({a_i}\),要将它划分为 \(k\) 段,定义每一段的权值为这段中 \((i,j) \ s.t. \ i<j,\ a_i=a_j\) 的个数,求一种划分方 ...
- Wannafly Camp 2020 Day 3D 求和 - 莫比乌斯反演,整除分块,STL,杜教筛
杜教筛求 \(\phi(n)\), \[ S(n)=n(n+1)/2-\sum_{d=2}^n S(\frac{n}{d}) \] 答案为 \[ \sum_{d=1}^n \phi(d) h(\fra ...
- Wannafly Camp 2020 Day 2B 萨博的方程式 - 数位dp
给定 \(n\) 个数 \(m_i\),求 \((x_1,x_2,...,x_n)\) 的个数,使得 \(x_1 \ xor\ x_2\ xor\ ...\ xor\ x_n = k\),且 \(0 ...
- Wannafly Camp 2020 Day 2D 卡拉巴什的字符串 - 后缀自动机
动态维护任意两个后缀的lcp集合的mex,支持在串末尾追加字符. Solution 考虑在 SAM 上求两个后缀的 LCP 的过程,无非就是找它们在 fail 树上的 LCA,那么 LCP 长度就是这 ...
- Wannafly Camp 2020 Day 1D 生成树 - 矩阵树定理,高斯消元
给出两幅 \(n(\leq 400)\) 个点的无向图 \(G_1 ,G_2\),对于 \(G_1\) 的每一颗生成树,它的权值定义为有多少条边在 \(G_2\) 中出现.求 \(G_1\) 所有生成 ...
- Wannafly Camp 2020 Day 2I 堡堡的宝藏 - 费用流
感谢这道题告诉我KM求的是 完备 最大权匹配 :( #include <bits/stdc++.h> using namespace std; #define reset(x) memse ...
- Wannafly Camp 2020 Day 2J 邦邦的2-SAT模板
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; cout<<n& ...
随机推荐
- openlayers6结合geoserver利用WFS服务实现图层新增功能(附源码下载)
内容概览 1.openlayers6结合geoserver利用WFS服务实现图层新增功能2.源代码demo下载 效果图如下: 本篇主要是openlayers6通过调用geoserver发布的地图服务W ...
- 《自拍教程25》在Linux上配置环境变量
我们说的环境变量,一般是指的是PATH环境变量, Linux我们用Ubuntu操作系统来举例. 我们从官网下载了Sublime Text的Linux已编译好的包. https://download.s ...
- python中的“赋值与深浅拷贝”
Python中,赋值与拷贝(深/浅拷贝)之间是有差异的,这主要源于数据在内存中的存放问题,本文将对此加以探讨. 1 赋值(添加名字) 赋值不会改变内存中数据存放状态,比如在内存中存在一个名为data的 ...
- JavaSE学习笔记(12)---线程
JavaSE学习笔记(12)---线程 多线程 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 并行:指两个或多个事件在同一时刻发生(同时发生). 在操作系统中,安装了多个程序,并发指的是在 ...
- 有关使用phpstudy搭建sqli-lab环境搭建时发生Uncaught Error: Call to undefined function mysql_connect()错误
文章更新于2020-1-30 问题描述 Uncaught Error: Call to undefined function mysql_connect() 分析 经查php手册可知 mysql_co ...
- 【python基础语法】第2天作业练习题
""" 1.用户输入一个数值,请判断用户输入的是否为偶数?是偶数输出True,不是输出False(提示:input输入的不管是什么,都会被转换成字符串,自己扩展,想办法将 ...
- Kali linux中安装字体的一种方法
有人说,lucida sans typewriter字体是一种非常适合的编程字体,所以想试试.经过一番折腾,终于在Clion中用上了.步骤如下: 第一步:先下载这个字体. http://www.dow ...
- IDEA 在debug模式下启动慢或者无法启动解决
参考:https://www.cnblogs.com/han-1034683568/p/8603588.html 背景 这两天在开发项目的时候发现用debug模式启动项目的时候,项目启动速度非常慢甚至 ...
- LOJ6287 诗歌
题意 给定一个排列,问是否存在\(\forall a,b,a\neq b\)满足\(2|(a+b)\)且\(\frac{a+b}{2}\)在\(a,b\)间 做法 枚举中点\(a\),即需要存在类似\ ...
- java-局部变量,成员变量区别
1. 内存中的位置 成员变量: 堆内存 局部变量: 栈内存 2. 生命周期 成员变量:随着对象的创建而存在,随着对象的消失而消失 局部变量:随着方法的调用而存在,随着方法调用完毕而消失 3. 注意事项 ...