题目链接

P4847 银河英雄传说V2

解题思路

我天哪!!!\(splay\)在\(rotate\)的时候先\(upd(y)\)再\(upd(x)\)!!以后不能再因为这个\(WA\)一晚上了!!!

AC代码

#include<stdio.h>
#define ls t[x].s[0]
#define rs t[x].s[1]
#define rt t[0].s[1]
struct Splay{
int f,s[2];
long long sum,data;
}t[200010];
int tot,siz;
int id(int x){return x==t[t[x].f].s[1];}
int find(int x){while(t[x].f)x=t[x].f;return x;}
void upd(int x){t[x].sum=t[ls].sum+t[rs].sum+t[x].data;}
void connect(int x,int f,int son){if(!x&&!f)return;t[x].f=f;t[f].s[son]=x;}
void rotate(int x){
int y=t[x].f,r=t[y].f,idx=id(x),idy=id(y),b=t[x].s[idx^1];
connect(b,y,idx);connect(y,x,idx^1);connect(x,r,idy);
upd(y);upd(x);
}
void splay(int now,int to){
while(to!=t[now].f){
int up=t[now].f;
if(t[up].f==to)rotate(now);
else if(id(now)==id(up))rotate(up),rotate(now);
else rotate(now),rotate(now);
}
}
long long query(int x,int y){
if(x==y)return t[x].data;
if(find(x)!=find(y))return -1;
splay(x,0);splay(y,x);
return t[x].data+t[y].data+t[t[y].s[id(y)^1]].sum;
}
int main(){
int i,n,o,v,m;char a[5]={0};
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%lld",&t[i].data);
for(i=0;i<m;i++){
scanf("%s%d",a,&o);
if(a[0]=='M'){
scanf("%d",&v);o=find(o);v=find(v);
int x=v;
if(o!=v){
while(rs)x=rs;
rs=o;
t[o].f=x;
splay(x,0);
}
}else if(a[0]=='Q'){
scanf("%d",&v);
printf("%lld\n",query(o,v));
}else{
splay(o,0);
t[t[o].s[0]].f=0;
t[o].s[0]=0;
upd(o);
}
}
return 0;
}

P4847 银河英雄传说V2 题解(Splay)的更多相关文章

  1. [洛谷P4847]银河英雄传说V2

    题目大意:有$n(n\leqslant2\times10^5)$个序列,有$m(m\leqslant2\times10^5)$个操作,分三种: 1. $M\;x\;y:$把$x$所在的序列放在$y$所 ...

  2. NOI2002_ Galaxy银河英雄传说86

    NOI2002_ Galaxy银河英雄传说86     公元五八○一年,地球居民迁移至金牛座α第二行星,:宇宙历七九九年,银河系的两大军事集团在巴米利恩星:杨威利擅长排兵布阵,巧妙运用各种战术屡次以少 ...

  3. NOI2002 银河英雄传说

    P1196 银河英雄传说 367通过 1.1K提交 题目提供者该用户不存在 标签并查集NOI系列2001(或之前) 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 莱因哈特什么鬼? 私人代码 ...

  4. 【u010】银河英雄传说

    Time Limit: 1 second Memory Limit: 128 MB [问题描述] 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开 ...

  5. codevs1540 银河英雄传说

    描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发战争.泰山压顶集 ...

  6. NOI2002 洛谷 P1196 银河英雄传说

    神奇的并查集问题 题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦 创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩 ...

  7. codevs 1540 银河英雄传说

    题目描述 Description 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米 ...

  8. 数据结构(并查集):COGS 260. [NOI2002] 银河英雄传说

    260. [NOI2002] 银河英雄传说 ★★☆   输入文件:galaxy.in   输出文件:galaxy.out   简单对比时间限制:5 s   内存限制:128 MB [问题描述] 公元五 ...

  9. CH4101 银河英雄传说

    题意 4101 银河英雄传说 0x40「数据结构进阶」例题 描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展.  宇宙历七 ...

随机推荐

  1. ARM汇编指令-STMFD/LDMFD

    根据调用规则ATPCS,程序一般都使用FD(FullDescending)类型的数据栈(满栈),那么对立的就由空栈类型的数据栈.空栈是指SP操作完后指向的地址空间是未使用的,反之满栈就是SP指向的地址 ...

  2. Google Tag Manager

    Google Tag Manager SEO https://www.wappalyzer.com/technologies/tag-managers/google-tag-manager/ UTM ...

  3. BPMN 2.0

    BPMN 2.0 Business Process Model and Notation 业务流程模型和符号 https://www.omg.org/spec/BPMN/2.0.2/ bpmn-js ...

  4. iOS effect & swiper delete components

    iOS effect & swiper delete components mint-ui & cell-swipe https://elemefe.github.io/mint-ui ...

  5. how to create one single-file Web Component just using the HTML, CSS, JavaScript

    how to create one single-file Web Component just using the HTML, CSS, JavaScript web components html ...

  6. py django 渲染前端打包的视图

    前端打包后基本这样 $ ls dist /static index.html 在index.html中的publicPath指向static 1. 创建一个www模块 $ python manage. ...

  7. VAST重磅出击,NGK网络搜索量超越ETH!

    Wechat指数中,NGK超越ETH,NGK搜索指数是157648点位,单日环比上涨11.95%,ETH搜索指数是115604点位,就连区块链标杆的BTC也仅仅只有171669点位,我们可清楚的看到N ...

  8. 法兰西金融专访SPC空投重磅来袭

    最近,法兰西金融日报联合德意志财经等知名金融媒体就SPC这一话题进行了专访. 法兰西金融日报记者德维尔斯问到,之前2020年的BGV项目等市场反响异常火爆,2021年已经来到,NGK目前有何新的大动作 ...

  9. AttributeError: 'function' object has no attribute 'as_view'

    我的描述:当我启用jwt_required来进行token验证的时候,我提示错误; 解决方案: 修改前代码: 修改后代码: 多看书.多多了解.多看看世界...

  10. java自学第4期——:Scanner类、匿名对象介绍、Random类、ArrayList集合、标准类格式、String类、static静态、Arrays工具类、Math类(1)

    一.Scanner类 1.api简介: 应用程序编程接口 2.Scanner类: 作用:获取键盘输入的数据 位置: java.util.Scanner. 使用:使用成员方法nextInt() 和 ne ...