序号连续,,体现在树上一点关系都没有。。所以这一条性质用不上就只能暴力了

所以就需要考虑序号连续有什么用。

首先所求的是一个区间所以就可以用前缀和化成两个点←重要套路

然后求lca往上的距离就可以每个点往上+1,查询目标点往上的点里有几个一、 ←相当于离散差分

然后就可以把两端的位置都散进前缀和里

然后扫一遍就可以了、、

码:

#include<iostream>
#include<cstdio>
#define P 201314
using namespace std;
#include<vector>
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define ll long long
#define N 100005
int d[N],fu[N],sz[N],hson[N],top[N],dui[N],n,m,tot,a,b,op,fa;
ll c,ans[N],he[N*2],jbj[N*2];
vector<int>v[N],q[N],qq1[N],q2[N],qq2[N];
void dfs1(int o,int fa,int dis)
{int i;d[o]=dis;fu[o]=fa;sz[o]=1;for(i=0;i<v[o].size();i++){int nd=v[o][i];if(nd==fa)continue;dfs1(nd,o,dis+1);sz[o]+=sz[nd];if(sz[hson[o]]<sz[nd])hson[o]=nd;   }
}
void dfs2(int o,int tap)
{int i;dui[o]=++tot;top[o]=tap;if(hson[o])dfs2(hson[o],tap);for(i=0;i<v[o].size();i++){int nd=v[o][i];if(nd==fu[o]||nd==hson[o])continue;dfs2(nd,nd);        }
}
void up(int o)
{he[o]=(he[o<<1]+he[o<<1|1])%P;
}
void down(int o,int l,int r)
{if(jbj[o]>0){int mid=(l+r)>>1;jbj[o<<1]+=jbj[o];jbj[o<<1|1]+=jbj[o];he[o<<1]+=jbj[o]*(mid-l+1);he[o<<1|1]+=jbj[o]*(r-mid);jbj[o<<1]%=P;jbj[o<<1|1]%=P;he[o<<1]%=P;he[o<<1|1]%=P;jbj[o]=0;     }
}
void jia(int o,int l,int r)
{
if(a<=l&&r<=b)
{if(op==0){he[o]+=(r-l+1);he[o]%=P;jbj[o]++;jbj[o]%=P;}else{c+=he[o];c%=P;  }return;
}
down(o,l,r);
int mid=(l+r)>>1;
if(a<=mid)jia(zuo);
if(b>mid)jia(you);
up(o);
}
void work1(int o)
{op=0;while(o!=0){a=dui[top[o]];b=dui[o];jia(1,1,n);o=fu[top[o]];  }
}
ll work2(int o)
{op=1;c=0;while(o!=0){a=dui[top[o]];b=dui[o];jia(1,1,n);o=fu[top[o]]; }   return c;
}
int main()
{int i,j,l,r,x;scanf("%d%d",&n,&m);for(i=2;i<=n;i++){scanf("%d",&fa);fa++;v[fa].push_back(i);v[i].push_back(fa);       }for(i=1;i<=m;i++){scanf("%d%d%d",&l,&r,&x);l++;r++;x++;q[l-1].push_back(x);qq1[l-1].push_back(i);q2[r].push_back(x);qq2[r].push_back(i);}dfs1(1,0,1);dfs2(1,1);for(i=1;i<=n;i++)
{
work1(i);
for(j=0;j<q[i].size();j++)
{ans[qq1[i][j]]-=work2(q[i][j]);   ans[qq1[i][j]]%=P;
}
for(j=0;j<q2[i].size();j++)
{
ans[qq2[i][j]]+=work2(q2[i][j]);ans[qq2[i][j]]%=P;
}
}   for(i=1;i<=m;i++){printf("%lld\n",(ans[i]+P)%P);      }
}

2017.9.28 lca 失败总结相关推荐

  1. 《麻省理工科技评论》:2018年18大科技趋势,2017年7大失败技术

    来源:科技周 摘要:2018 年伊始,许多科技大势仍在继续,正如比尔·盖茨所说,"大多数人高估了某种技术的短期价值,低估了其长期价值."同样,大多数的年度预测会高估了一年内一些事件 ...

  2. 易语言调试工具 code by:↖星空·之上↗ Ver:2.0 (2017/5/28更新)

    目前测试了win7 32 64位可以使用,win10右键以管理员身份运行. 支持Hook易语言静态编译和非静态编译的程序! 注意:XP不兼容,不能用.   Ver1.1 (17:12 2017/4/2 ...

  3. 找不到mfc140u.dll或者Microsoft Visual C++ 2017 Redistributable一直安装失败解决

    找不到mfc140u.dll 安装后提示这个问题,我将xshell卸载重新安装后发现安装过程中提示Microsoft Visual C++ 2017 Redistributable一直安装失败,所以问 ...

  4. 2017.10.28 管道取珠 失败总结

    这个题有一个新套路:  ∑ai^2 要知道一般的计数题是∑ai,,所以这多乘了一个自己有什么意义呢? 于是想到,两两枚举,加起来正好是ai^2:: 所以就有一个想法,枚举两种取法, 然后就是插数dp, ...

  5. 【补档2017.12.28】我的2017-漫长的苦痛与渐入佳境的愤怒

    2017的第一个季度我一直在想用瑞萨做一款飞控出来,选传感器到AD画板再到e2studio新建工程,之所以这么笃信瑞萨,是因为我当时满脑子想着我要去日本,电子设计国赛日企瑞萨赞助,控制题必考四轴,做出 ...

  6. NetworkX玩一下 --update@2017.06.28

    写在前面的话 She is compelling,spectral, fascinating, an unforgettably unique performer 在写NetworkX的时候我想起来一 ...

  7. 2017.10.18 开店 失败总结

    噩梦+级别的题,最近的题又难想又难调,还都是第一次打 以前做过和这个题很像的题,,但并没有想到. 注意前缀和的应用,似乎很多题都想不到用前缀和化成点. 然后就是套路:每个点到一个点的距离==每个点到根 ...

  8. 2017.10.11 灾难 失败总结

    想了一上午没有结果,主要是因为原图搜索性太强,,就是每个点的影响虽然是固定的,但决策是需要遍历的.. 所以不能抽象成数字拓扑思考,不然同样的影响会被访问多次,却因为目标点的状态不同  而无法继续化简 ...

  9. 2017.9.24 森林 失败总结

    这个题就不能链剖了,,必须老老实实用dfs序 dfs序真简单啊..然而树上路径做多了似乎就只会链剖了 和正常树上距离一样,只不过搬到了主席树上. 然后加边就只要启发式合并即可.注意暴力重构 似乎能li ...

最新文章

  1. 大一计算机在线考试,Word 大一计算机考试操作题
  2. iOS多线程开发(三)---Run Loop(一)
  3. 'ascii' codec can't encode characters in position 20-24:ordinal not in range(128)报错根本解决办法
  4. 在Ubuntu 18.04上安装和使用Tesseract 4
  5. 你需要熟练运用的12个命令行工具
  6. linux (centos7)安装3.7.8
  7. Oracle中on和where的区别
  8. 山东大学计算机学院交叉,Xueying Qin
  9. vue中组件的data为什么是一个函数
  10. 未来软件开发的主流方向:规则引擎 (Rule Engine)
  11. 大数据预测实战-随机森林预测实战(二)-随机森林回归模型
  12. 我知道的Activity
  13. 红手指云手机屏蔽方案
  14. 身份证复印件正确签注写法 -- 很重要!
  15. 数字孪生是什么,数字孪生能干什么?一文读懂
  16. HDR视频色调映射算法(之四:Display adaptive TMO)
  17. Leetcode-数据结构-121. 买卖股票的最佳时机
  18. 1949-2020年全国31省铁路里程数据
  19. 鬼谷子:大胸怀、大格局、成大事者,一定要看懂这三句话
  20. 21个在网页设计的精美图标使用灵感

热门文章

  1. C++ 链表 leetcode习题总结
  2. Head First设计模式读书笔记九 第十章 状态模式
  3. matlab 十字路口左转
  4. 【Paper-Attack】Attacking Graph-Based Classification without Changing Existing Connections
  5. Spark vs. MapReduce 时间节约66%,计算节约40%
  6. MySQL最基础的操作
  7. php dio获取串口数据,flutter通过dio读取二进制数据,比如通过api接口读取图片
  8. Java基础02 位运算符<<、>>
  9. debian linux vnc,Debian 如何配置安装Xfce桌面+VNC远程桌面服务
  10. python制作的游戏如何转化为swf_如何从python生成swf格式的幻灯片?