树链剖分模板
来源:互联网 发布:淘宝买家服务热线 编辑:程序博客网 时间:2024/05/17 08:06
void dfs(ll x){ deep[x]=deep[dad[x]]+1; size[x]=1; for(ll i=0;i<vec[x].size();i++) if(dad[x]!=vec[x][i]){ dad[vec[x][i]]=x; dfs(vec[x][i]); size[x]+=size[vec[x][i]]; } } void dfs1(ll x){ if(!top[x])top[x]=x; dfn[x]=++cnt;pos[cnt]=x; ll t=0; for(ll i=0;i<vec[x].size();i++) if(dad[x]!=vec[x][i]&&size[vec[x][i]]>size[t])t=vec[x][i]; if(t)top[t]=top[x],dfs1(t); for(ll i=0;i<vec[x].size();i++) if(dad[x]!=vec[x][i]&&vec[x][i]!=t)dfs1(vec[x][i]); } void query(ll x,ll y){ ll ans=0;for(;top[x]!=top[y];x=dad[top[x]]){ if(deep[top[x]]<deep[top[y]])swap(x,y); ans+=ask(dfn[top[x]],dfn[x],1,n,1); } if(deep[x]>deep[y])swap(x,y); ans+=ask(dfn[x],dfn[y],1,n,1); printf("%lld\n",ans);}
阅读全文
0 0
- 树链剖分 模板
- 模板-树链剖分
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 【模板】树链剖分
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分模板
- 树链剖分 模板
- 【模板】树链剖分
- c++left right 和 setw() 函数的用法Alignment of Code
- http请求的常见响应码
- android自定义adapter
- OCX制作CAB(一) -- OCX工程的创建
- C语言enum枚举类型解析
- 树链剖分模板
- CentOS 7下安装MySQL与mariadb冲突的解决办法
- final 抽象类 抽象方法 接口
- 生成M3U8播放地址用于手机HLS Player(M3U8Player)观看电视频道直播方案
- Java_基础—拷贝文件
- EditText 限制输入为中文,个数为6个
- CodeForces
- 1967: Election
- 7_18|C语言|判断浮点数等于0|浮点数的保存形式