[atAGC023F]01 on Tree
对每一个节点维护一个序列,初始即自己(长度为1),并记$a_{i}$和$b_{i}$分别为第$i$个点序列上0和1的个数(也需要存储具体的序列)
考虑$\frac{b_{i}}{a_{i}}$最小中最深的非根节点(全局),其必然在其父亲之后选择,那么不妨将其与父亲合并,并将其的序列加入到父亲末尾(启发式合并)并利用$a_{i}$和$b_{i}$即可统计逆序对数量
(特别的,为了避免$a_{i}=0$,可以写成$\frac{b_{i}}{a_{i}+b_{i}}$)
另外,合并需要两个并查集,分别维护深度最小的点以及位置,以及set去找到$\frac{b_{i}}{a_{i}}$最小的点
1 #include<bits/stdc++.h>
2 using namespace std;
3 #define N 200005
4 set<pair<double,int> >s;
5 deque<int>v[N];
6 int n,x,fa[N],f[N],pos[N],sum[N][2];
7 long long ans;
8 int find(int k){
9 if (k==f[k])return k;
10 return f[k]=find(f[k]);
11 }
12 double calc(int k){
13 return 1.0*sum[k][1]/(sum[k][0]+sum[k][1]);
14 }
15 pair<double,int> get(int k){
16 return make_pair(calc(pos[find(k)]),k);
17 }
18 void merge(int x,int y){
19 x=find(x),y=find(y);
20 f[y]=x;
21 int xx=x;
22 x=pos[x],y=pos[y];
23 deque<int>::iterator it;
24 if (v[x].size()<v[y].size()){
25 while (!v[x].empty()){
26 v[y].push_front(v[x].back());
27 if (v[x].back())ans+=sum[y][0];
28 v[x].pop_back();
29 }
30 sum[y][0]+=sum[x][0];
31 sum[y][1]+=sum[x][1];
32 pos[xx]=y;
33 }
34 else{
35 while (!v[y].empty()){
36 v[x].push_back(v[y].front());
37 if (!v[y].front())ans+=sum[x][1];
38 v[y].pop_front();
39 }
40 sum[x][0]+=sum[y][0];
41 sum[x][1]+=sum[y][1];
42 pos[xx]=x;
43 }
44 }
45 int main(){
46 scanf("%d",&n);
47 for(int i=2;i<=n;i++)scanf("%d",&fa[i]);
48 for(int i=1;i<=n;i++)f[i]=pos[i]=i;
49 for(int i=1;i<=n;i++){
50 scanf("%d",&x);
51 sum[i][x]++;
52 v[i].push_back(x);
53 if (i>1)s.insert(get(i));
54 }
55 for(int i=1;i<n;i++){
56 x=(*s.begin()).second;
57 set<pair<double,int> >::iterator it;
58 s.erase(s.begin());
59 int y=find(fa[x]);
60 if (y!=1)s.erase(get(y));
61 merge(fa[x],x);
62 if (y!=1)s.insert(get(y));
63 }
64 printf("%lld",ans);
65 }
[atAGC023F]01 on Tree的更多相关文章
- 【AtCoder AGC023F】01 on Tree(贪心)
Description 给定一颗 \(n\) 个结点的树,每个点有一个点权 \(v\).点权只可能为 \(0\) 或 \(1\). 现有一个空数列,每次可以向数列尾部添加一个点 \(i\) 的点权 \ ...
- 【luogu AT3957】[AGC023F] 01 on Tree
01 on Tree 题目链接:luogu AT3957 题目大意 有一棵根为 \(1\) 的树,每个节点有个值 \(0\) 或 \(1\). 然后每次你可以把一个没有父亲的点删除,然后把值放进一个数 ...
- AtCoder Grand Contest 023 F - 01 on Tree
Description 题面 Solution HNOI-day2-t2 复制上去,删点东西,即可 \(AC\) #include<bits/stdc++.h> using namespa ...
- SaltStack 架构自动部署 03
架构图 模块化部署 系统模块:系统优化,内核参数,网络参数 功能模块:如:nginx,tomcat, 业务模块: 1.在salt-master端修改配置文件 [root@01 salt]# vim / ...
- Git详解之九:Git内部原理
Git 内部原理 不管你是从前面的章节直接跳到了本章,还是读完了其余各章一直到这,你都将在本章见识 Git 的内部工作原理和实现方式.我个人发现学习这些内容对于理解 Git 的用处和强大是非常重要的, ...
- 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
本文由云+社区发表 作者:腾讯工蜂用户:王二卫 从不一样的视角了解git,以便更好的使用git 一.git & git 版本库认识 git 是一个内容寻址的文件系统,其核心部分是一个简单的键值 ...
- [机器学习]集成学习--bagging、boosting、stacking
集成学习简介 集成学习(ensemble learning)通过构建并结合多个学习器来完成学习任务. 如何产生"好而不同"的个体学习器,是集成学习研究的核心. 集成学习的思路是通过 ...
- git内部原理
Git 内部原理 无论是从之前的章节直接跳到本章,还是读完了其余章节一直到这——你都将在本章见识到 Git 的内部工作原理 和实现方式. 我们发现学习这部分内容对于理解 Git 的用途和强大至关重要. ...
- 【AtCoder】AGC023 A-F题解
可以说是第一场AGC了,做了三道题之后还有30min,杠了一下D题发现杠不出来,三题滚粗了 rating起步1300+,感觉还是很菜... 只有三题水平显然以后还会疯狂--啊(CF的惨痛经历) 改题的 ...
随机推荐
- WIN10下的VMware与Docker冲突的解决方案
VMARE版本升级到15.5以上 WIN10升级到2004版本以上 Hyper-V为开启状态
- maven指令安装jar包到本地仓库
在项目配置过程中,偶尔会遇到jar包下载不来的情况,而同事又有相应的jar包,那么就可以通过maven安装指令直接将jar包安装到自己的本地仓库了. 安装指令: mvn install:install ...
- 听说,99% 的 Go 程序员都被 defer 坑过
原文链接: 听说,99% 的 Go 程序员都被 defer 坑过 先声明:我被坑过. 之前写 Go 专栏时,写过一篇文章:Go 专栏|错误处理:defer,panic 和 recover.有小伙伴留言 ...
- 初学python-day3 元组
day2 列表已更新!
- 【UE4 C++】关卡切换、流关卡加载卸载
切换关卡 基于 UGameplayStatics:: OenLevel UGameplayStatics::OpenLevel(GetWorld(), TEXT("NewMap") ...
- 腾讯bugly产生bug定位行数不准解决方案
定位不准是因为做了混淆导致行数与实际代码行数不对.解决方案是要上传符号表.下载地址https://bugly.qq.com/v2/downloads 下载好因为我打开文件的说明文件是空文件(可能工作人 ...
- UltraSoft - Beta - Scrum Meeting 5
Date: May 21st, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 修复了课程通知链接的bug Liuzh 前端 暂无 Kkkk 前端 增加消息中心板 ...
- [对对子队]会议记录5.19(Scrum Meeting6)
今天已完成的工作 吴昭邦 工作内容:搭建第9关 相关issue:搭建关卡7.8.9 相关签入:feat: 第9关能够通过 何瑞 工作内容:搭建第9关 相关issue:搭建关卡7.8 ...
- 并发编程从零开始(八)-ConcurrentHashMap
并发编程从零开始(八)-ConcurrentHashMap 5.5 ConcurrentHashMap HashMap通常的实现方式是"数组+链表",这种方式被称为"拉链 ...
- android tcp通讯
Andoird TCP通讯 前言 最近在写一个即时通讯的项目,有一些心得,写出来给大家分享指正一下. 简单描述一下这个项目: 实时查询车辆运行状态的项目,走TCP通迅. 接口采用GZIP压缩. 后台是 ...