#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相关推荐

  1. AC日记——「HNOI2017」礼物 LiBreOJ 2020

    #2020. 「HNOI2017」礼物 思路: A题进程: 一眼出式子->各种超时过不去->看题解明白还有fft这个东西->百度文库学习fft->学习dft->学习fft ...

  2. LibreOJ #2006. 「SCOI2015」小凸玩矩阵 二分答案+二分匹配

    #2006. 「SCOI2015」小凸玩矩阵 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 小 ...

  3. 「SCOI2015」小凸想跑步 解题报告

    「SCOI2015」小凸想跑步 最开始以为和多边形的重心有关,后来发现多边形的重心没啥好玩的性质 实际上你把面积小于的不等式列出来,发现是一次的,那么就可以半平面交了 Code: #include & ...

  4. #2009. 「SCOI2015」小凸玩密室

    神仙题啊.完全想不出 首先看方案.可以从任意一个点开始,在这个点要先走完子树,然后走到父亲,再走兄弟,再走父亲的父亲,父亲的兄弟..一直走到1,1的另外一个子树,结束. 完全不会鸭.jpg 设f[i] ...

  5. 格志日志 android,GitHub - SaintAdrian/GridDiary: 格志日记Android版,用「自问」的形式引导自己写日记。...

    格志日记 为什么要开发这个软件? 日记,大概是一个人最忠实的朋友.开心的时候,可以和它分享:难过的时候,可以向它倾诉:就算日子如水一般平淡地匆匆而过, 至少也有它帮你记住那些繁杂和琐碎,那些声希味淡和 ...

  6. 【LibreOJ】#6395. 「THUPC2018」城市地铁规划 / City 背包DP+Prufer序

    [题目]#6395. 「THUPC2018」城市地铁规划 / City [题意]给定n个点要求构造一棵树,每个点的价值是一个关于点度的k次多项式,系数均为给定的\(a_0,...a_k\),求最大价值 ...

  7. 读心术:从零知识证明中提取「知识」——探索零知识证明系列(三)

    本文已更新至Githubhttps://github.com/sec-bit/learning-zkp/blob/master/zkp-intro/3/zkp-pok.md 导言:有些理论非常有趣,零 ...

  8. 「文献」多倍体植物基因组测序组装当前策略

    「文献」多倍体植物基因组测序组装当前策略 文献地址: Current Strategies of Polyploid Plant Genome Sequence Assembly 基因组多倍化主要发生 ...

  9. 全屋Wi-Fi领域「兵戎相见」,鸿雁这一局赢面大不大?

    作者 | 牧之 编辑 | 小沐 出品 | 智哪儿 zhinaer.cn 相比全屋智能,另一个刚需属性更强,消费规模更大的细分市场,便是全屋Wi-Fi.在这个板块,当鸿雁入局的时候,笔者还是有些许的「诧 ...

  10. CVPR 2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:葛云皓  |  编辑:Amusi 本文提出了一个视觉推理解释框架 (VRX: Visual Reaso ...

最新文章

  1. 使用angularJs ng-repeat做表格合并行效果
  2. android: 播放音频
  3. AOP日志-前置通知操作
  4. 设有两个16位整数变量A和B,试编写完成下述操作的程序。
  5. Python基础----列表
  6. Linux ext4文件系统下 extundelete 恢复 误删除的文件
  7. python xy不在第一维度_ValueError:x和y必须具有相同的第一个维度ipython 3.5
  8. 金融数据分析之财务分析表要填数据怎么办?(学习理财课程后开发的助手工具)
  9. 零基础学启发式算法(1)-贪心算法(Greedy Algorithm)
  10. java static 可见性_java可重入锁可见性分析
  11. Effective Python 中文版
  12. R语言中常用的抽样函数
  13. 深度相机原理揭秘--双目立体视觉
  14. C盘容量不够,扩容办法
  15. 日本語 紜本「えほん」中国語 3-4
  16. .md文件是什么?.md如何打开?
  17. HTML5 canvas 实现回合制战棋游戏(1):加载和绘制图形
  18. 微信小程序:紫色特别舒服的UI趣味测试微信小程序
  19. 美通社企业新闻汇总 | 2019.3.4 | 万豪国际2019年新增30多家奢华酒店;迪士尼李宁合作推出复古运动装...
  20. 提取邮件内容 html,整个Html内容以邮件的方式发送出去(取出标签包含的用户输入信息)...

热门文章

  1. FFMpeg新旧接口之间的一些对应关系
  2. NWT与HHTH两个公司的对比
  3. RELEASE版本的RegisterClass()失败
  4. 用remastersys备份LINUX,注意备份盘的空间占用
  5. DeepStream不支持多 RTSP源(多个摄像头)
  6. python爬虫好学不_python爬虫难学吗
  7. iis7 php 中文乱码,php输出文字乱码的解决方法
  8. mysql创建的数据库保存在哪里_在MySQL中创建数据库时,我的数据库保存在哪里?...
  9. vue实现上移下移_Vue实现table上下移动功能示例
  10. 荣耀电视鸿蒙系统的,荣耀智慧屏首发抢先体验:电视只是小功能,鸿蒙系统才是真亮点...