BZOJ 2843 极地旅行社
【题解】
这道题其实有个树状数组维护dfs序的做法,不过懒得想那么多直接写了Link-Cut Tree
1 #include<cstdio> 2 #include<algorithm> 3 #define N 600010 4 #define rg register 5 #define ls (c[u][0]) 6 #define rs (c[u][1]) 7 using namespace std; 8 int n,m,x,y,top,val[N],c[N][2],fa[N],sum[N],st[N],rev[N]; 9 char opt[50]; 10 inline int read(){ 11 int k=0,f=1; char c=getchar(); 12 while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar(); 13 while('0'<=c&&c<='9')k=k*10+c-'0',c=getchar(); 14 return k*f; 15 } 16 inline bool isroot(int u){ 17 return c[fa[u]][0]!=u&&c[fa[u]][1]!=u; 18 } 19 inline bool which(int u){ 20 return c[fa[u]][1]==u; 21 } 22 inline void pushup(int u){ 23 sum[u]=sum[ls]+sum[rs]+val[u]; 24 } 25 inline void pushdown(int u){ 26 if(rev[u]) rev[ls]^=1,rev[rs]^=1,rev[u]=0,swap(ls,rs); 27 } 28 void rotate(int u){ 29 int f=fa[u],gf=fa[f],wh=which(u); 30 if(!isroot(f)) c[gf][which(f)]=u; 31 fa[u]=gf; fa[f]=u; fa[c[u][wh^1]]=f; 32 c[f][wh]=c[u][wh^1]; c[u][wh^1]=f; 33 pushup(f); pushup(u); 34 } 35 void splay(int u){ 36 st[top=1]=u; 37 for(rg int i=u;!isroot(i);i=fa[i]) st[++top]=fa[i]; 38 for(rg int i=top;i;i--) pushdown(st[i]); 39 while(!isroot(u)){ 40 if(!isroot(fa[u])) rotate(which(u)==which(fa[u])?fa[u]:u); 41 rotate(u); 42 } 43 } 44 void access(int u){ 45 for(rg int son=0;u;son=u,u=fa[u]) splay(u),c[u][1]=son,pushup(u); 46 } 47 void makeroot(int u){ 48 access(u); splay(u); rev[u]^=1; 49 } 50 int find(int u){ 51 access(u); splay(u); 52 while(ls) u=ls; return u; 53 } 54 void split(int x,int y){ 55 makeroot(x); access(y); splay(y); 56 } 57 void cut(int x,int y){ 58 split(x,y); 59 if(c[y][0]==x) c[y][0]=0,fa[x]=0; 60 } 61 void link(int x,int y){ 62 makeroot(x); fa[x]=y; 63 } 64 int main(){ 65 n=read(); 66 for(rg int i=1;i<=n;i++) val[i]=sum[i]=read(); 67 m=read(); 68 while(m--){ 69 scanf("%s",opt+1); x=read(); y=read(); 70 if(opt[1]=='b'){ 71 if(find(x)==find(y)) puts("no"); 72 else{ 73 puts("yes"); 74 link(x,y); 75 } 76 } 77 if(opt[1]=='p'){ 78 access(x); splay(x); val[x]=y; pushup(x); 79 } 80 if(opt[1]=='e'){ 81 if(find(x)!=find(y)) puts("impossible"); 82 else{ 83 split(x,y); 84 printf("%d\n",sum[y]); 85 } 86 } 87 } 88 return 0; 89 }
View Code
转载于:https://www.cnblogs.com/DriverLao/p/8744994.html
BZOJ 2843 极地旅行社相关推荐
- bzoj 2843: 极地旅行社
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 1077 Solved: 645 [Submit][Status][Discuss] Descrip ...
- 2843: 极地旅行社
Description 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服 务.当地最受欢迎的当然是帝企鹅了,这些小家伙经常 ...
- bzoj2843极地旅行社题解
bzoj2843极地旅行社题解 题目大意 有n座小岛,当中每一个岛都有若干帝企鹅. 一開始岛与岛之间互不相连.有m个操作.各自是在两个岛之间修一座双向桥,若两岛已连通则不修并输出no,若不连通就输出y ...
- bzoj2843极地旅行社
bzoj2843极地旅行社 题意: 一些点,每个点有一个权值.有三种操作:点与点连边,单点修改权值,求两点之间路径上点的权值和(需要判输入是否合法) 题解: 以前一直想不通为什么神犇们的模板中LCT在 ...
- BZOJ2843 - 极地旅行社
Portal Description 给出\(n(n\leq3\times10^4)\)个独立的带权顶点,对其进行\(m(m\leq10^5)\)次操作: 连接两个不连通的节点.如果它们已经联通,输出 ...
- 【BZOJ 2843】极地旅行社
复习一下Link Cut Tree的模板. #include<cstdio> #include<cstring> #include<algorithm> #defi ...
- BZOJ2843:极地旅行社
Description 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常 ...
- 极地旅行社[LCT]
题目描述 不久之前,Mirko建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了N座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结队的游走 ...
- [COCI 2009] OTOCI / 极地旅行社
题目描述 不久之前,Mirko 建立了一个旅行社,名叫"极地之梦".这家旅行社在北极附近购买了 nn 座冰岛,并且提供观光服务. 当地最受欢迎的当然是帝企鹅了,这些小家伙经常成群结 ...
最新文章
- Java读取property配置文件
- 它指导了计算机行业大半个世纪的发展,如今却要走下神坛?
- mysql无法存储文字_mysql存储不了中文字符串怎么办
- java字符串的课后作业
- 微信AI从识物到通用图像搜索的探索揭秘
- typedef的四个用途和两个陷阱
- 消消乐实现下坠_手把手教你如何实现iOS消消乐小游戏Demo
- 2021-09-08推荐系统 简述DeepFM模型
- NOIP2017错题
- 如何增加mysql字段长度_增加数据库字段长度
- SEO学习必上的网址大全
- ubuntu apt-get install更新域名解析失败问题的处理方法
- 思科模拟器 --- 扩展IP访问控制列表配置
- 百度无线音乐盒刷打印服务器,百度无线音乐盒引关注 让普通音箱秒变Wi-Fi音箱...
- 如何向天翼云服务器上传文件,天翼云盘如何上传文件?
- 解密韦德之膝:康复因再世华佗
- Java基础以及变量和运算符、包机制、javadoc生成
- 行业研究-全球与中国牙科电子病历软件市场现状及未来发展趋势
- 突发!诺基亚裁员超1200人
- CP1202官方串口驱动