Portal

Description

给出\(n(n\leq3\times10^4)\)个独立的带权顶点,对其进行\(m(m\leq10^5)\)次操作:

  • 连接两个不连通的节点。如果它们已经联通,输出no
  • 更改单点的权值。
  • 求路径\((u,v)\)上的点权和。如果它们不连通,输出impossible

Solution

一道link/cut tree裸题啦。

Code

//极地旅行社
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int const N=3e4+10;
int n,m;
int pre[N];
int find(int x) {return pre[x]==x?x:pre[x]=find(pre[x]);}
int fa[N],ch[N][2],val[N],sum[N]; bool rev[N];
int wh(int p) {return ch[fa[p]][1]==p;}
bool notRt(int p) {return p!=0&&ch[fa[p]][wh(p)]==p;}
void rever(int p) {rev[p]^=1; swap(ch[p][0],ch[p][1]);}
void update(int p) {sum[p]=val[p]+sum[ch[p][0]]+sum[ch[p][1]];}
void pushdw(int p) {if(rev[p]) rever(ch[p][0]),rever(ch[p][1]),rev[p]=0;}
void rotate(int p)
{int q=fa[p],r=fa[q],w=wh(p);fa[p]=r; if(notRt(q)) ch[r][wh(q)]=p;fa[ch[q][w]=ch[p][w^1]]=q;fa[ch[p][w^1]=q]=p;update(q); update(p);
}
void pushdwRt(int p) {if(notRt(p)) pushdwRt(fa[p]); pushdw(p);}
void splay(int p)
{pushdwRt(p);for(int q=fa[p];notRt(p);rotate(p),q=fa[p]) if(notRt(q)) rotate(wh(p)==wh(q)?q:p);update(p);
}
void access(int p) {for(int q=0;p;q=p,p=fa[p]) splay(p),ch[p][1]=q,update(p);}
void makeRt(int p) {access(p); splay(p),rever(p);}
void link(int p,int q) {makeRt(p); fa[p]=q; pre[find(p)]=find(q);}
int query(int p,int q) {makeRt(p),access(q); splay(q); return sum[q];}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&val[i]),sum[i]=val[i];scanf("%d",&m);for(int i=1;i<=n;i++) pre[i]=i;for(int i=1;i<=m;i++){char opt[15]; int x,y;scanf("%s",opt); scanf("%d%d",&x,&y);if(opt[0]=='b')if(find(x)==find(y)) puts("no");else link(x,y),puts("yes");else if(opt[0]=='p') val[x]=y,splay(x);else if(opt[0]=='e'){if(find(x)==find(y)) printf("%d\n",query(x,y));else printf("impossible\n");}}return 0;
}

转载于:https://www.cnblogs.com/VisJiao/p/BZOJ2843.html

BZOJ2843 - 极地旅行社相关推荐

  1. bzoj2843极地旅行社题解

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

  2. bzoj2843极地旅行社

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

  3. BZOJ2843:极地旅行社

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

  4. BZOJ2843: 极地旅行社

    [传送门:BZOJ2843] 简要题意: 给出n个点以及它们的权值,有m个操作,4种操作: 1.询问从x到y的路径上的权值和,如果不连通则输出impossible 2.连接x和y,如果本来就联通则输出 ...

  5. BZOJ2843 极地旅行社 LCT

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

  6. bzoj2843 极地旅行社

    bzoj2843 三个操作:1.连接x,y 2.把x的值改为y 3.查询x到y这条路径上的所以数的和 没有cut的lct- ps:真的想打自己(再见 各种笔误 #include <cstdio& ...

  7. bzoj 2843: 极地旅行社

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

  8. 极地旅行社[LCT]

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

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

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

最新文章

  1. html style属性
  2. outlook地址薄导入到FOXMAIL
  3. 实现table鼠标移动改变table行背景色
  4. iOS开发之第三方框架Masonry
  5. dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
  6. 编码时的一些普适原则
  7. 数据库-左外连接-右外连接
  8. 学习Winform了解到switch和if-else的妙处
  9. mac下用xattr命令来删除文件的扩展属性
  10. magento php 所需模块,magento博客 - Magento2 创建基本模块
  11. 1631. 最小体力消耗路径
  12. 查看maven,JDK版本号
  13. php网页可视化编辑器,推荐几款HTML可视化在线编辑器
  14. 涩会:大学学历——办理居住证的具体流程(深圳)
  15. 金山毒霸11,更新内容,问题修复了什么?
  16. 如何理解会议中控系统
  17. Java ServiceLoader使用和解析
  18. BZOJ4567[Scoi2016]背单词
  19. number of splits 划分的条件
  20. 1.2.1css简介

热门文章

  1. 一文带你彻底搞懂Docker中的cgroup
  2. 【待分类】用 SimPy 进行离散事件仿真(一)入门篇
  3. com.mysql.cj.jdbc.Driver报红解决方法
  4. 阿里云、腾讯云、百度云、京东云、华为云、盛大云、ucloud优势分析
  5. QNB以42亿美元的品牌价值荣膺中东和非洲地区最具价值银行品牌
  6. 计算机网络--bilibil
  7. Windows系统安装Android SDK
  8. 新专利曝光:未来 MacBook 或配备虹膜解锁功能
  9. Linux解决“未预期的符号“(“附近有语法错误”的问题方法
  10. 个人计算机安全意识如何提高,个人电脑安全意识如何提高..doc