博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1180: [CROATIAN2009]OTOCI
阅读量:4652 次
发布时间:2019-06-09

本文共 1843 字,大约阅读时间需要 6 分钟。

题目大意:询问两点是否连通(反人类的是连通输no,不联通输yes...),单点权值修改,路径和。

思路:正常的动态树,搞搞就行了。

#include
#include
#include
const int maxn=30010;using namespace std;int n,m;char op[15];struct LCT{ int sum[maxn],fa[maxn],c[maxn][2],rev[maxn],val[maxn]; bool isroot(int x){return (c[fa[x]][0]!=x)&&(c[fa[x]][1]!=x);} int which(int x){return c[fa[x]][1]==x;} void update(int x){sum[x]=sum[c[x][0]]+sum[c[x][1]]+val[x];} void flip(int x){swap(c[x][0],c[x][1]),rev[x]^=1;} void down(int x){if (rev[x]) flip(c[x][0]),flip(c[x][1]),rev[x]=0;} void relax(int x){if (!isroot(x)) relax(fa[x]);down(x);} void rotate(int x){ int y=fa[x],z=fa[y],nx=which(x),ny=which(y); fa[c[x][!nx]]=y,c[y][nx]=c[x][!nx]; fa[x]=z;if (!isroot(y)) c[z][ny]=x; fa[y]=x,c[x][!nx]=y;update(y); } void splay(int x){ relax(x); while (!isroot(x)){ if (isroot(fa[x])) rotate(x); else if (which(x)==which(fa[x])) rotate(fa[x]),rotate(x); else rotate(x),rotate(x); } update(x); } void access(int x){for (int p=0;x;x=fa[x]) splay(x),fa[c[x][1]=p]=x,update(x),p=x;} void makeroot(int x){access(x),splay(x),flip(x);} void modify(int x,int v){val[x]=v,splay(x);} int findroot(int x){access(x),splay(x);for (;c[x][0];x=c[x][0]);return x;} void link(int a,int b){makeroot(a),fa[a]=b;} void qsum(int a,int b){ if (findroot(a)!=findroot(b)) return puts("impossible"),void(); makeroot(a),access(b),splay(b),printf("%d\n",sum[b]); } void bridge(int a,int b){ if (findroot(a)==findroot(b)) return puts("no"),void(); else link(a,b),puts("yes"); }}T;int main(){ scanf("%d",&n); for (int i=1,a;i<=n;i++) scanf("%d",&a),T.modify(i,a); scanf("%d",&m); for (int i=1,a,b;i<=m;i++){ scanf("%s%d%d",op,&a,&b); if (op[0]=='b') T.bridge(a,b); if (op[0]=='p') T.modify(a,b); if (op[0]=='e') T.qsum(a,b); } return 0;}

转载于:https://www.cnblogs.com/thythy/p/5493600.html

你可能感兴趣的文章
Apache本地环境部署
查看>>
开发模式接入
查看>>
java 中的复制(将D盘中的文件复制到E盘中)
查看>>
【原创】谈谈redis的热key问题如何解决
查看>>
LoadLibrary 失败 GetLastError 126
查看>>
Monty Hall 问题与贝叶斯定理的理解
查看>>
利用JavaScript的字符串操作实现简单查字
查看>>
安全发布的模式
查看>>
python的N个小功能(更新文件)
查看>>
【bzoj 4390】 [Usaco2015 dec]Max Flow(树上差分)
查看>>
java之sleep、wait、yield、join、notify乱解
查看>>
DEDECMS 关键字不能小于2个字节!
查看>>
Flutter学习笔记(10)--容器组件、图片组件
查看>>
gitlab 的使用策略和简单介绍
查看>>
Web.py Cookbook 简体中文版 - 保存上传的文件
查看>>
MongoDB学习笔记二—Shell操作
查看>>
Docker——入门实战
查看>>
UIView
查看>>
List 的一个有用的高效的操作 removeAll
查看>>
呵呵 不能相信
查看>>