AC日记——「SCOI2015」情报传递 LiBreOJ 2011
#2011. 「SCOI2015」情报传递
思路:
可持久化树状数组模板;
代码:
#include <bits/stdc++.h> using namespace std; #define maxn 200005 #define maxm maxn*100 int deep[maxn],f[maxn],id[maxn],top[maxn],cnt,soot; int head[maxn],V[maxn],E[maxn],lar[maxn],size[maxn]; int val[maxm],root[maxn],ch[maxm][2],tot,Tl,Tr,n,m,Ans; inline void in(int &now) {char Cget=getchar();now=0;while(Cget>'9'||Cget<'0')Cget=getchar();while(Cget>='0'&&Cget<='9'){now=now*10+Cget-'0';Cget=getchar();} } void build(int &now,int l,int r) {now=++tot;if(l==r) return;int mid=l+r>>1;build(ch[now][0],l,mid);build(ch[now][1],mid+1,r); } void add(int &now,int pre,int l,int r,int to,int x) {now=++tot,val[now]=val[pre]+x;if(l==r) return;int mid=l+r>>1;if(to<=mid) add(ch[now][0],ch[pre][0],l,mid,to,x),ch[now][1]=ch[pre][1];else add(ch[now][1],ch[pre][1],mid+1,r,to,x),ch[now][0]=ch[pre][0]; } int lowbit(int x) {return x&(-x); } void add(int to1,int to2,int x) {while(to1<=n) add(root[to1],root[to1],1,m,to2,x),to1+=lowbit(to1); } void dfs1(int now) {deep[now]=deep[f[now]]+1,size[now]=1;for(int i=head[now];i;i=E[i]){dfs1(V[i]),size[now]+=size[V[i]];if(size[lar[now]]<size[V[i]]) lar[now]=V[i];} } void dfs2(int now,int chain) {top[now]=chain,id[now]=++cnt;root[id[now]]=root[0];if(lar[now]){dfs2(lar[now],chain);for(int i=head[now];i;i=E[i]){if(V[i]==lar[now]) continue;dfs2(V[i],V[i]);}} } int query(int now,int l,int r) {if(l>=Tl&&r<=Tr) return val[now];int mid=l+r>>1,res=0;if(Tl<=mid) res+=query(ch[now][0],l,mid);if(Tr>mid) res+=query(ch[now][1],mid+1,r);return res; } int query(int l,int r) {l--;int res=0;while(r) res+=query(root[r],1,m),r-=lowbit(r);while(l) res-=query(root[l],1,m),l-=lowbit(l);return res; } int query(int x,int y,int tl,int tr) {int res=0;Tl=tl,Tr=tr;while(top[x]!=top[y]){if(deep[top[x]]<deep[top[y]]) res+=query(id[top[y]],id[y]),y=f[top[y]];else res+=query(id[top[x]],id[x]),x=f[top[x]];}if(deep[x]>deep[y]) swap(x,y);res+=query(id[x],id[y]);return res; } int lca(int x,int y) {while(top[x]!=top[y]){if(deep[top[x]]>deep[top[y]]) x=f[top[x]];else y=f[top[y]];}return deep[x]<deep[y]?deep[x]:deep[y]; } int main() {freopen("data.txt","r",stdin);freopen("data.out","w",stdout);in(n);int op,u,v,c;for(int i=1;i<=n;i++){in(f[i]);if(!f[i]) soot=i;else E[i]=head[f[i]],V[i]=i,head[f[i]]=i;}in(m);build(root[0],1,m),dfs1(soot),dfs2(soot,soot);for(int i=1;i<=m;i++){in(op);if(op==2)in(u),add(id[u],i,1);else{in(u),in(v),in(c),Ans=deep[u]+deep[v]-2*lca(u,v)+1;printf("%d ",Ans);if(i-c-1>=1) printf("%d\n",query(u,v,1,i-c-1));else printf("0\n");}}return 0; }
转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/7071529.html
AC日记——「SCOI2015」情报传递 LiBreOJ 2011相关推荐
- AC日记——「HNOI2017」礼物 LiBreOJ 2020
#2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...
- LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配
#2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小 ...
- 「SCOI2015」小凸想跑步 解题报告
「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...
- #2009. 「SCOI2015」小凸玩密室
神仙题啊.完全想不出 首先看方案.可以从任意一个点开始,在这个点要先走完子树,然后走到父亲,再走兄弟,再走父亲的父亲,父亲的兄弟..一直走到1,1的另外一个子树,结束. 完全不会鸭.jpg 设f[i] ...
- 格志日志 android,GitHub - SaintAdrian/GridDiary: 格志日记Android版,用「自问」的形式引导自己写日记。...
格志日记 为什么要开发这个软件? 日记,大概是一个人最忠实的朋友.开心的时候,可以和它分享:难过的时候,可以向它倾诉:就算日子如水一般平淡地匆匆而过, 至少也有它帮你记住那些繁杂和琐碎,那些声希味淡和 ...
- 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序
[题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...
- 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)
本文已更新至Githubhttps://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/3/zkp-pok.md 导言:有些理论非常有趣,零 ...
- 「文献」多倍体植物基因组测序组装当前策略
「文献」多倍体植物基因组测序组装当前策略 文献地址: Current Strategies of Polyploid Plant Genome Sequence Assembly 基因组多倍化主要发生 ...
- 全屋Wi-Fi领域「兵戎相见」,鸿雁这一局赢面大不大?
作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn 相比全屋智能,另一个刚需属性更强,消费规模更大的细分市场,便是全屋Wi-Fi.在这个板块,当鸿雁入局的时候,笔者还是有些许的「诧 ...
- CVPR 2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」...
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:葛云皓 | 编辑:Amusi 本文提出了一个视觉推理解释框架 (VRX: Visual Reaso ...
最新文章
- 使用angularJs ng-repeat做表格合并行效果
- android: 播放音频
- AOP日志-前置通知操作
- 设有两个16位整数变量A和B,试编写完成下述操作的程序。
- Python基础----列表
- Linux ext4文件系统下 extundelete 恢复 误删除的文件
- python xy不在第一维度_ValueError:x和y必须具有相同的第一个维度ipython 3.5
- 金融数据分析之财务分析表要填数据怎么办?(学习理财课程后开发的助手工具)
- 零基础学启发式算法(1)-贪心算法(Greedy Algorithm)
- java static 可见性_java可重入锁可见性分析
- Effective Python 中文版
- R语言中常用的抽样函数
- 深度相机原理揭秘--双目立体视觉
- C盘容量不够,扩容办法
- 日本語 紜本「えほん」中国語 3-4
- .md文件是什么?.md如何打开?
- HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形
- 微信小程序:紫色特别舒服的UI趣味测试微信小程序
- 美通社企业新闻汇总 | 2019.3.4 | 万豪国际2019年新增30多家奢华酒店;迪士尼李宁合作推出复古运动装...
- 提取邮件内容 html,整个Html内容以邮件的方式发送出去(取出标签包含的用户输入信息)...
热门文章
- FFMpeg新旧接口之间的一些对应关系
- NWT与HHTH两个公司的对比
- RELEASE版本的RegisterClass()失败
- 用remastersys备份LINUX,注意备份盘的空间占用
- DeepStream不支持多 RTSP源(多个摄像头)
- python爬虫好学不_python爬虫难学吗
- iis7 php 中文乱码,php输出文字乱码的解决方法
- mysql创建的数据库保存在哪里_在MySQL中创建数据库时,我的数据库保存在哪里?...
- vue实现上移下移_Vue实现table上下移动功能示例
- 荣耀电视鸿蒙系统的,荣耀智慧屏首发抢先体验:电视只是小功能,鸿蒙系统才是真亮点...