题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2157

仍然是LCT模板题~

不过有一些需要注意的地方,点和边的区分,0号点的 mx 和 mn 等等;

还有变成相反数的处理,要像线段树一样先修改再下传标记,那么查询时候就不用先 pushdown 了;

不过1A还是极好的~

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=,inf=;
int n,m,fa[maxn],mx[maxn],mn[maxn],sum[maxn],w[maxn],c[maxn][],rev[maxn],tag[maxn],sta[maxn],top;
bool isroot(int x){return c[fa[x]][]!=x && c[fa[x]][]!=x;}
void pushup(int x)
{
int ls=c[x][],rs=c[x][];
sum[x]=sum[ls]+sum[rs]+w[x];
mx[x]=max(mx[ls],mx[rs]); mn[x]=min(mn[ls],mn[rs]);
if(x<=n)return;
mx[x]=max(mx[x],w[x]); mn[x]=min(mn[x],w[x]);
}
void tg(int x)
{
tag[x]^=;
w[x]=-w[x]; sum[x]=-sum[x];
swap(mx[x],mn[x]); mx[x]=-mx[x]; mn[x]=-mn[x];
}
void pushdown(int x)
{
int ls=c[x][],rs=c[x][];
if(rev[x])
{
rev[ls]^=; rev[rs]^=; rev[x]=;
swap(c[x][],c[x][]);
}
if(tag[x])
{
tag[x]=;
if(ls)tg(ls); if(rs)tg(rs);//
}
}
void rotate(int x)
{
int y=fa[x],z=fa[y],d=(c[y][]==x);
if(!isroot(y))c[z][c[z][]==y]=x;
fa[x]=z; fa[y]=x; fa[c[x][!d]]=y;
c[y][d]=c[x][!d]; c[x][!d]=y;
pushup(y); pushup(x);
}
void splay(int x)
{
sta[top=]=x;
for(int i=x;!isroot(i);i=fa[i])sta[++top]=fa[i];
for(;top;top--)pushdown(sta[top]);
for(;!isroot(x);rotate(x))
{
int y=fa[x],z=fa[y];
if(isroot(y))continue;
((c[y][]==x)^(c[z][]==y))?rotate(x):rotate(y);
}
}
void access(int x)
{
for(int t=;x;c[x][]=t,pushup(x),t=x,x=fa[x])splay(x);
}
void makeroot(int x)
{
access(x); splay(x); rev[x]^=;
}
void link(int x,int y)
{
makeroot(x); fa[x]=y;
}
void query(int x,int y)
{
makeroot(x); access(y); splay(y);
}
void change(int x,int t)
{
makeroot(x); w[x]=t; pushup(x);
}
int main()
{
scanf("%d",&n);
mx[]=-inf; mn[]=inf;//
for(int i=,x,y,z;i<n;i++)
{
scanf("%d%d%d",&x,&y,&z); x++; y++;
w[i+n]=z;
link(x,i+n); link(y,i+n);
}
scanf("%d",&m); char ch[];
for(int i=,x,y;i<=m;i++)
{
scanf("%s%d%d",&ch,&x,&y);
if(ch[]=='C')change(x+n,y);
else
{
x++; y++; query(x,y);
if(ch[]=='N')tg(y);
if(ch[]=='S')printf("%d\n",sum[y]);
if(ch[]=='A')printf("%d\n",mx[y]);
if(ch[]=='I')printf("%d\n",mn[y]);
}
}
return ;
}

bzoj2157 旅游——LCT的更多相关文章

  1. [bzoj2157]旅游 (lct)

    这个应该也算裸的模板题吧..主要是边权的问题,对于每条边u->v,我们可以新建一个节点代替他,把边的信息弄到新的点上,就变成u->x->v了... 当然了这样的话要防止u和v这些没用 ...

  2. bzoj2157旅游

    bzoj2157旅游 题意: 给定有权树,支持单边权修改,路径边权取相反数,路径边权求和,路径边权求最大最小值. 题解: 用link-cut tree link-cut tree与树链剖分有些类似,都 ...

  3. 【BZOJ2157】旅游 LCT

    模板T,SB的DMoon..其实样例也是中国好样例...一开始不会复制,yangyang:找到“sample input”按住shift,按page down.... #include <ios ...

  4. BZOJ2157 旅游 【树剖 或 LCT】

    题目 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径. ...

  5. [BZOJ2157]旅游(树链剖分/LCT)

    树剖裸题,当然LCT也可以. 树剖: #include<cstdio> #include<algorithm> #define ls (x<<1) #define ...

  6. BZOJ2157: 旅游(LCT)

    Description Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间 ...

  7. bzoj 2157: 旅游 (LCT 边权)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2157 题面; 2157: 旅游 Time Limit: 10 Sec  Memory Lim ...

  8. BZOJ2157: 旅游

    传送门 先讲一个悲伤地故事 RunID User Problem Result Memory Time Language Code_Length Submit_Time 1635823 Cydiate ...

  9. BZOJ2157旅游——树链剖分+线段树

    题目描述 Ray 乐忠于旅游,这次他来到了T 城.T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接.为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路 ...

随机推荐

  1. Django 模版语法 一

    创建项目 django_template 和 app django-admin startproject django_template python manage.py startapp app01 ...

  2. 将json格式转为url参数格式的方法(xjl456852整理修改)

    测试页面: <html> <head> <script type="text/javascript" src="jquery-1.11.3. ...

  3. 【01】《响应式Web设计:HTML5和CSS3实战》

    [01]   (魔芋:已看完.) [01]<响应式Web设计:HTML5和CSS3实战>(全).pdf 共246页.   2013年1月出版.   读后感:适合入门的书籍,对于响应式布局, ...

  4. conflunce安装配置

    下载 下载Confluence-v5.4.4.zip包,其中包含   atlassian-confluence-5.4.4-x64.bin #程序二进制文件 confluence5.x-crack.z ...

  5. [TyvjP1050] 最长公共子序列(DP)

    传送门 f[i][j] 表示第 1 个串匹配到第 i 位,第 2 个串匹配到第 j 位的答案. f[i][j] = max(f[i - 1][j], f[i][j - 1])    (a[i] != ...

  6. restful(1):序列化

    restful协议中,一切皆是资源,操作只是请求方式 model_to_dict()方法: from django.forms.models import model_to_dict obj = Pu ...

  7. Vue 实例以及生命周期

    最简单的 Vue 实例 //html <div id="app"> {{message}} </div> //javascript var vm = new ...

  8. POJ1276 Cash Machine

    Time Limit: 1000MS   Memory Limit: 10000KB   64bit IO Format: %lld & %llu Description A Bank pla ...

  9. 【BZOJ3110】K大数查询(权值线段树套线段树+标记永久化,整体二分)

    题意:有N个位置,M个操作.操作有两种,每次操作 如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...

  10. Kafka 生产消费 Avro 序列化数据

    https://unmi.cc/kafka-produce-consume-avro-data/ https://unmi.cc/apache-avro-serializing-deserializi ...