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

LCT水题!

然而没有1A(咬牙)!

注意值有负数,所以取 max 的话要把作为“哨兵”的 0号点 的 max 赋成很小的值才行。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int const maxn=;
int n,m,fa[maxn],c[maxn][],rev[maxn],mx[maxn],sum[maxn],w[maxn],sta[maxn],a[maxn],b[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]=x;
if(w[mx[x]]<w[mx[ls]])mx[x]=mx[ls];
if(w[mx[x]]<w[mx[rs]])mx[x]=mx[rs];
}
void reverse(int x)
{
if(rev[x])
{
rev[c[x][]]^=; rev[c[x][]]^=; rev[x]=;
swap(c[x][],c[x][]);
}
}
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--)reverse(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;splay(x),c[x][]=t,pushup(x),t=x,x=fa[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 cut(int x,int y)
{
query(x,y); fa[x]=; c[y][]=;
}
void change(int u,int t)
{
makeroot(u); w[u]=t; pushup(u);//makeroot
}
int main()
{
scanf("%d",&n); w[mx[]]=-;//!
for(int i=,x,y;i<n;i++)scanf("%d%d",&a[i],&b[i]);
for(int i=;i<=n;i++)scanf("%d",&w[i]);
for(int i=;i<n;i++)link(a[i],b[i]);
scanf("%d",&m);
char ch[];
for(int i=,x,y;i<=m;i++)
{
scanf("%s",&ch); scanf("%d%d",&x,&y);
if(ch[]=='C')change(x,y);
else
{
query(x,y);
if(ch[]=='M')printf("%d\n",w[mx[y]]);
if(ch[]=='S')printf("%d\n",sum[y]);
}
}
return ;
}

最新文章

  1. 几种鼠标触发CSS事件
  2. mysql 允许远程访问
  3. 深入理解PHP内核(十一)函数-函数的内部结构
  4. 制作DIP Package及DIP焊盘制作,不规则焊盘制作
  5. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.6
  6. Android DrawerLayout 点击事情穿透
  7. linux笔记本上安装了双显卡驱动(intel+nvidia)
  8. ROM、RAM、DRAM、SRAM和FLASH的区别
  9. Linux vi 命令详解
  10. Java:输入输出流 java.io包的层次结构
  11. ORA-28002密码失效问题解决
  12. Activiti 框架学习
  13. XPath简介及节点
  14. CentOS6.8配置SonarQube Scanner配合SonarQube使用
  15. syslog之二:syslog协议及rsyslog服务全解析
  16. centos7 部署 docker、shipyard
  17. linux导出、导入sql
  18. (16)Cocos2d-x 多分辨率适配完全解析
  19. 31、Django实战第31天:我的课程
  20. 2018.7.23 oracle中的CLOB数据类型

热门文章

  1. element-UI 多表单重置的时候的坑
  2. 怎样用JMeter做接口测试?
  3. 洛谷P1186 玛丽卡
  4. idea使用之maven中央仓库索引更新
  5. Jquery为DIV添加点击事件,Jquery为a标签超链接添加点击事件
  6. Java电商项目-8.实现SSO单点登陆
  7. Ubuntu 16.04 GNOME在桌面左侧添加启动器(Launcher)
  8. WinExec可能会引起消息重入
  9. [WebGL入门]五,矩阵的基础知识
  10. Python开发【第*篇】【Socket网络编程】