传送门-P2843
(1180是权限题,所以就不放了)
写在前面:为什么BZOJ上LCT好多都是权限题(╯‵□′)╯︵┻━┻
思路:判断联通用findroot函数(洞穴探测里已经说过了);修改x的操作可以把x旋转到所在的splay的根上来,再修改;查询的话把x,y分别access到同一棵splay上,splay操作后求值即可
注意:无
代码:

#include<bits/stdc++.h>
#define pd(i) (i>='0'&&i<='9')
using namespace std;
int n,m,x,y;
int stacks[30010];
char s[10];
struct tree
{int fa,ch[2],sum,data;bool lazy;
}a[200010];
int in()
{int t=0;char ch=getchar();while (!pd(ch)) ch=getchar();while (pd(ch)) t=(t<<3)+(t<<1)+ch-'0',ch=getchar();return t;
}
void ct(int x)
{a[x].sum=a[a[x].ch[0]].sum+a[a[x].ch[1]].sum+a[x].data;
}
#define isroot(x) (a[a[x].fa].ch[0]!=x&&a[a[x].fa].ch[1]!=x)
void pushdown(int x)
{if (!a[x].lazy) return;a[a[x].ch[0]].lazy^=1;a[a[x].ch[1]].lazy^=1;swap(a[x].ch[0],a[x].ch[1]);a[x].lazy=0;
}
void rorate(int x,bool mk)
{int y=a[x].fa;a[x].fa=a[y].fa;if (!isroot(y)){if (a[a[y].fa].ch[0]==y) a[a[y].fa].ch[0]=x;else a[a[y].fa].ch[1]=x;}a[y].ch[!mk]=a[x].ch[mk];a[a[x].ch[mk]].fa=y;a[x].ch[mk]=y;a[y].fa=x;ct(y);ct(x);
}
void splay(int x)
{int y,cnt=0,k=x;stacks[++cnt]=k;while (!isroot(k)) k=a[k].fa,stacks[++cnt]=k;for (int i=cnt;i;i--) pushdown(stacks[i]);while (!isroot(x)){y=a[x].fa;if (isroot(y)){if (a[y].ch[0]==x) rorate(x,1);else rorate(x,0);}else if (a[a[y].fa].ch[0]==y){if (a[y].ch[0]==x) rorate(y,1);else rorate(x,0);rorate(x,1);}else{if (a[y].ch[1]==x) rorate(y,0);else rorate(x,1);rorate(x,0);}}
}
void access(int x)
{for (int y=0;x;y=x,x=a[x].fa)splay(x),a[x].ch[1]=y,ct(x);
}
void link(int x,int y)
{access(x);splay(x);a[x].lazy^=1;a[x].fa=y;
}
void cut(int x,int y)
{access(x);splay(x);a[x].lazy^=1;access(y);splay(y);a[x].fa=a[y].ch[0]=0;ct(y);
}
int findroot(int x)
{access(x);splay(x);while (a[x].ch[0]) x=a[x].ch[0];return x;
}
main()
{n=in();for (int i=1;i<=n;i++)a[i].data=in(),a[i].sum=a[i].data;scanf("%d",&m);while (m--){scanf("%s",s);x=in();y=in();if (s[0]=='b'){if (findroot(x)==findroot(y)) puts("no");else puts("yes"),link(x,y);}else if (s[0]=='p'){splay(x);a[x].sum+=(y-a[x].data);a[x].data=y;}else{if (findroot(x)!=findroot(y)) puts("impossible");elseaccess(x),splay(x),a[x].lazy^=1,access(y),splay(y),printf("%d\n",a[y].sum);}}
}

【BZOJ28431180】极地旅行社,LCT练习相关推荐

  1. 极地旅行社[LCT]

    题目描述 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走 ...

  2. BZOJ2843 极地旅行社 LCT

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2843 题意概括 有n座岛 每座岛上的企鹅数量虽然会有所改变,但是始终在[0, 1000]之间.你的 ...

  3. bzoj2843极地旅行社题解

    bzoj2843极地旅行社题解 题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出y ...

  4. bzoj2843极地旅行社

    bzoj2843极地旅行社 题意: 一些点,每个点有一个权值.有三种操作:点与点连边,单点修改权值,求两点之间路径上点的权值和(需要判输入是否合法) 题解: 以前一直想不通为什么神犇们的模板中LCT在 ...

  5. BZOJ2843 - 极地旅行社

    Portal Description 给出\(n(n\leq3\times10^4)\)个独立的带权顶点,对其进行\(m(m\leq10^5)\)次操作: 连接两个不连通的节点.如果它们已经联通,输出 ...

  6. BZOJ2843:极地旅行社

    Description 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常 ...

  7. bzoj 2843: 极地旅行社

    Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 1077  Solved: 645 [Submit][Status][Discuss] Descrip ...

  8. [COCI 2009] OTOCI / 极地旅行社

    题目描述 不久之前,Mirko 建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了 nn 座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结 ...

  9. 2843: 极地旅行社

    Description 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服 务.当地最受欢迎的当然是帝企鹅了,这些小家伙经常 ...

最新文章

  1. Windows 10 系统版本更新历史
  2. [reference]-ARM core timeline
  3. Synchronize对String加锁
  4. 集合objectjava_collection
  5. 简单约瑟夫环问题解法汇总(模拟/数论)
  6. 为什么计算机有信息记忆功能,为什么计算机有记忆能力
  7. leetcode 491. 递增子序列 思考分析
  8. python ftp上传_Python FTP传输的简单示例
  9. 结合DvaJS来写小程序
  10. 不知道怎么用GitHub怎么当程序员?拿出十分钟,包你会
  11. error: failed to push some refs to ‘github.com:English.git‘ hint: Updates w
  12. python sql查询返回记录_干货!Python与MySQL数据库的交互实战
  13. [转载] 【原创】Python 3 查看字符编码方法
  14. CentOS 7.5 重置 root 密码
  15. Atitit.java c#.net php项目中的view复用(jsp,aspx,php的复用)
  16. 文字描边加粗_这些PPT描边字,效果好到没朋友~
  17. 激光粒度仪测试原理及详情解答【注解】
  18. C#上位机工作感想2(2020.4.15-2021.7.24)
  19. 漫谈程序员系列 薪资,你是我不能言说的伤
  20. 像元二分模型计算植被覆盖度

热门文章

  1. javascript基础修炼(11)——DOM-DIFF的实现
  2. 微服务与SpringCloud
  3. Android Setting 日期相关API,自定义DatePicker
  4. MacOS使用ffmpeg报错killed的问题与解决
  5. code blocks代码性能分析_Julia系列教程13--如果写出高性能的Julia代码
  6. Vue的基础认知二---vue的双向绑定/vue获取DOM节点
  7. linux uart中断程序,linux 串口中断实现
  8. 用python计算准确率_Python 学习 scikit-learn 预测准确率计算
  9. vuex commit 模块_长篇连载:Vuex源码学习(二)脉络梳理
  10. java 内存泄漏问题_JAVA内存泄漏问题处理方法经验总结