BZOJ2843 - 极地旅行社
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 - 极地旅行社相关推荐
- bzoj2843极地旅行社题解
bzoj2843极地旅行社题解 题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出y ...
- bzoj2843极地旅行社
bzoj2843极地旅行社 题意: 一些点,每个点有一个权值.有三种操作:点与点连边,单点修改权值,求两点之间路径上点的权值和(需要判输入是否合法) 题解: 以前一直想不通为什么神犇们的模板中LCT在 ...
- BZOJ2843:极地旅行社
Description 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常 ...
- BZOJ2843: 极地旅行社
[传送门:BZOJ2843] 简要题意: 给出n个点以及它们的权值,有m个操作,4种操作: 1.询问从x到y的路径上的权值和,如果不连通则输出impossible 2.连接x和y,如果本来就联通则输出 ...
- BZOJ2843 极地旅行社 LCT
欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ2843 题意概括 有n座岛 每座岛上的企鹅数量虽然会有所改变,但是始终在[0, 1000]之间.你的 ...
- bzoj2843 极地旅行社
bzoj2843 三个操作:1.连接x,y 2.把x的值改为y 3.查询x到y这条路径上的所以数的和 没有cut的lct- ps:真的想打自己(再见 各种笔误 #include <cstdio& ...
- bzoj 2843: 极地旅行社
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1077 Solved: 645 [Submit][Status][Discuss] Descrip ...
- 极地旅行社[LCT]
题目描述 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走 ...
- [COCI 2009] OTOCI / 极地旅行社
题目描述 不久之前,Mirko 建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了 nn 座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结 ...
最新文章
- html style属性
- outlook地址薄导入到FOXMAIL
- 实现table鼠标移动改变table行背景色
- iOS开发之第三方框架Masonry
- dubbo 服务压测_全链路压测资料汇总——业内大厂解决方案
- 编码时的一些普适原则
- 数据库-左外连接-右外连接
- 学习Winform了解到switch和if-else的妙处
- mac下用xattr命令来删除文件的扩展属性
- magento php 所需模块,magento博客 - Magento2 创建基本模块
- 1631. 最小体力消耗路径
- 查看maven,JDK版本号
- php网页可视化编辑器,推荐几款HTML可视化在线编辑器
- 涩会:大学学历——办理居住证的具体流程(深圳)
- 金山毒霸11,更新内容,问题修复了什么?
- 如何理解会议中控系统
- Java ServiceLoader使用和解析
- BZOJ4567[Scoi2016]背单词
- number of splits 划分的条件
- 1.2.1css简介
热门文章
- 一文带你彻底搞懂Docker中的cgroup
- 【待分类】用 SimPy 进行离散事件仿真(一)入门篇
- com.mysql.cj.jdbc.Driver报红解决方法
- 阿里云、腾讯云、百度云、京东云、华为云、盛大云、ucloud优势分析
- QNB以42亿美元的品牌价值荣膺中东和非洲地区最具价值银行品牌
- 计算机网络--bilibil
- Windows系统安装Android SDK
- 新专利曝光:未来 MacBook 或配备虹膜解锁功能
- Linux解决“未预期的符号“(“附近有语法错误”的问题方法
- 个人计算机安全意识如何提高,个人电脑安全意识如何提高..doc