博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj 3669 [Noi2014]魔法森林
阅读量:7078 次
发布时间:2019-06-28

本文共 1760 字,大约阅读时间需要 5 分钟。

题目:

第二道LCT!

直接看TJ……

把连边表示成与点相连 是很好的。因为splay中的边变动得挺随意的。

感觉理解又加深了。那个query的部分,效果是x和y所在的辅助树中x深度最小、y深度最大,即当前辅助树就是x和y之间的链!

因为忘记在splay的最后pshp,RE(为什么是RE?)了好久。

#include
#include
#include
#include
#define ll long longusing namespace std;const int N=5e4+5,M=1e5+5,INF=0x7fffffff;int n,m,pre[N+M],mx[N+M],c[N+M][2],fa[N],stack[N+M],top,val[N+M],ans;//val //bool rev[N+M];struct Ed{ int x,y,a,b; bool operator<(const Ed &k)const {
return a
val[mx[x]])mx[x]=mx[c[x][0]]; if(val[mx[c[x][1]]]>val[mx[x]])mx[x]=mx[c[x][1]];}void reverse(int x){ if(rev[x]){ rev[c[x][0]]^=1;rev[c[x][1]]^=1; swap(c[x][0],c[x][1]); rev[x]=0; }}void rotate(int x){ int y=pre[x],z=pre[y],d=(x==c[y][1]); if(!isroot(y))c[z][y==c[z][1]]=x; pre[x]=z;pre[y]=x; c[y][d]=c[x][!d];pre[c[x][!d]]=y;c[x][!d]=y; pshp(y);pshp(x);}void splay(int x){ stack[top=1]=x; for(int t=x;!isroot(t);t=pre[t])stack[++top]=pre[t]; for(;top;top--)reverse(stack[top]); for(;!isroot(x);rotate(x)) { int y=pre[x],z=pre[y]; if(isroot(y))continue; ((c[y][0]==x)^(c[z][0]==y))?rotate(x):rotate(y); } pshp(x);//}void access(int x){ for(int t=0;x;c[x][1]=t,t=x,x=pre[x])splay(x);}void makeroot(int x){ access(x);splay(x);rev[x]^=1;}int query(int x,int y){ makeroot(x);access(y);splay(y);//y没有右儿子 //access之后相当于在辅助树中splay,故不用rev // printf("x=%d y=%d c[x][0]=%d c[x][1]=%d c[y][0]=%d c[y][1]=%d\n",x,y,c[x][0],c[x][1],c[y][0],c[y][1]); return mx[y]; //x和y之间的不应该是x的右儿子?// int vmx=mx[c[x][1]]; //此时应该是y为根、无右儿子;x为y的左儿子,无左儿子。故。 // if(val[vmx]

 

转载于:https://www.cnblogs.com/Narh/p/9234470.html

你可能感兴趣的文章
HDU2097 Sky数
查看>>
I00023 鸡兔同笼解法二
查看>>
B00009 C语言分割字符串库函数strtok
查看>>
HTML 重定向 ----定时跳转刷新页面
查看>>
RemoTing 搭建简单实现
查看>>
前端开发面试知识点大纲
查看>>
Linux查看程序端口占用情况
查看>>
mvc ajax提交数组参数(转)
查看>>
如何判断字符串所用何种加密编码
查看>>
PL/SQL database character set(AL32UTF8) and Client character set(ZHS16GBK) are different
查看>>
MVC LINQ中用封装的TSQL通用更新方法
查看>>
使用Python一年多了,总结八个好用的Python爬虫技巧
查看>>
文件特殊权限:SUID,SGID,SBIT
查看>>
ShareSDK的使用文章
查看>>
基于 Django2 实现邮箱注册登录功能
查看>>
设计模式之Adapter模式
查看>>
wait和waitpid详解
查看>>
提取CString中的汉字及个数
查看>>
Tomcat如何开启SSL配置(https)
查看>>
easy-ui 使用总结
查看>>