UOJ207 共价大爷游长沙
考虑到路径是有向的,不是很好维护。
如果路径无向的话,可以直接转化为链加和查询操作。
既然有向的话,不妨考虑一波hash。
对于一组询问x,y,可以把树划分为两颗子树。
合法显然需要满足
x子树的起点的hash=y子树的终点的hash
x子树的终点的hash=y子树的起点的hash
直接用LCT维护一个异或hash即可。
#include<iostream>
#include<cctype>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#define N 330000
#define L 300000
#define eps 1e-7
#define inf 1e9+7
#define db double
#define ll long long
#define ldb long double
using namespace std;
inline int read()
{char ch=0;int x=0,flag=1;while(!isdigit(ch)){ch=getchar();if(ch=='-')flag=-1;}while(isdigit(ch)){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();}return x*flag;
}
#define lson son[x][0]
#define rson son[x][1]
struct lnk{int x,y,z;}p[N];
int va[N],vb[N],sa[N],sb[N],sa_[N],sb_[N],f[N],st[N],flag[N],son[N][2];
bool get(int x){return son[f[x]][1]==x;}
bool isroot(int x){return (son[f[x]][0]!=x)&&(son[f[x]][1]!=x);}
void pushup(int x)
{sa[x]=sa[lson]^sa[rson]^sa_[x]^va[x];sb[x]=sb[lson]^sb[rson]^sb_[x]^vb[x];
}
void update(int x){flag[x]^=1;swap(lson,rson);}
void pushdown(int x){if(!flag[x])return;if(lson)update(lson);if(rson)update(rson);flag[x]=0;}
void rotate(int x)
{int y=f[x],z=f[y],tx=get(x),ty=get(y),p=son[x][!tx];if(!isroot(y))son[z][ty]=x;son[x][!tx]=y;son[y][tx]=p;if(p)f[p]=y;f[y]=x;f[x]=z;pushup(y);pushup(x);
}
void splay(int x)
{int cnt=0,tmp=x;st[++cnt]=x;while(!isroot(x))st[++cnt]=f[x],x=f[x];for(int i=cnt;i>=1;i--)pushdown(st[i]);x=tmp;while(!isroot(x)){int y=f[x];if(!isroot(y))rotate(get(x)==get(y)?y:x);rotate(x);}pushup(x);
}
void access(int x)
{for(int y=0;x;y=x,x=f[x]){splay(x);sa_[x]^=sa[rson];sb_[x]^=sb[rson];rson=y;sa_[x]^=sa[rson];sb_[x]^=sb[rson];pushup(x);}
}
void makeroot(int x){access(x);splay(x);update(x);}
void link(int x,int y)
{makeroot(x);access(y);splay(y);f[x]=y;sa_[y]^=sa[x];sb_[y]^=sb[x];pushup(y);
}
void cut(int x,int y)
{makeroot(x);access(y);splay(y);f[x]=son[y][0]=0;pushup(y);
}
void add1(int x,int k){makeroot(x);va[x]^=k;pushup(x);}
void add2(int x,int k){makeroot(x);vb[x]^=k;pushup(x);}
int rng(){int x=0;for(int i=0;i<=30;i++)x^=(rand()%2)<<i;return x;}
int main()
{srand(time(0));read();int n=read(),m=read(),cnt=0,s=0;for(int i=1;i<n;i++){int x=read(),y=read();link(x,y);}for(int i=1;i<=m;i++){int flag=read();if(flag==1){int x,y;x=read();y=read();cut(x,y);x=read();y=read();link(x,y);}if(flag==2){cnt++;p[cnt].x=read();p[cnt].y=read();p[cnt].z=rng();add1(p[cnt].x,p[cnt].z);add2(p[cnt].y,p[cnt].z);s^=p[cnt].z;}if(flag==3){int k=read();add1(p[k].x,p[k].z);add2(p[k].y,p[k].z);s^=p[k].z;}if(flag==4){int x=read(),y=read();makeroot(x);access(y);int a=sa_[y]^va[y],b=sb_[y]^vb[y]; if((a^b)==s)printf("YES\n");else printf("NO\n");}}return 0;
}
转载于:https://www.cnblogs.com/Creed-qwq/p/10354399.html
UOJ207 共价大爷游长沙相关推荐
- 【uoj#207】共价大爷游长沙 随机化+LCT维护子树信息
题目描述 给出一棵树和一个点对集合S,多次改变这棵树的形态.在集合中加入或删除点对,或询问集合内的每组点对之间的路径是否都经过某条给定边. 输入 输入的第一行包含一个整数 id,表示测试数据编号,如第 ...
- 【UOJ207】共价大爷游长沙【LCT】【异或】【随机化】
传送门 题意:维护一棵无权树和一个路径集合SSS,支持以下操作: 断边连边 在SSS加入中加入一条路径 删除SSS中的一条路径 询问是否SSS中的所有路径都经过了边(x,y)(x,y)(x,y) n≤ ...
- 【uoj207】 共价大爷游长沙
http://uoj.ac/problem/207 (题目链接) 题意 给出一棵无根树,4种操作:在路径集合中加入一条路径,在路径集合中删除一条路径,删一条边加一条边,查询一条边是否被集合中所有路径经 ...
- [UOJ#207]共价大爷游长沙
题目大意 一颗会动的树. 有一个点对集合会变. 每次询问一条树边,问集合内所有点对之间的路径是否都经过该边. 维护虚边信息的LCT 终于无聊来补了这题 每个点对随机一个10^9内的权值 然后给两端点的 ...
- ZJOI2019Round#1
考的这么差二试基本不用去了 不想说什么了.就把这几天听课乱记的东西丢上来吧 这里是二试乱听课笔记ZJOI2019Round#2 ZJOI Round#1 Day1 M.<具体数学>选讲 罗 ...
- 一句话题解(20170801~20170125)
8.1 bzoj 4720 noip2016 换教室 floyd预处理+期望(薛定谔的猫) bzoj 4318 OSU! 三次函数期望值 从一次.二次推得 8.2 bzoj 1076 状压+期望DP ...
- 跑出数字化升级“加速度”,腾讯云启产业基地“长沙模式”的探索
文 | 曾响铃 来源 | 科技向令说(xiangling0815) 当互联网与产业加速融合,数字经济成为发展新引擎. 在长沙,2019年,深耕岩土工程自动化监测领域的湖南湘银河传感科技有限公司,借助湘 ...
- 画论38 董其昌《画禅室随笔》
[中国历代画论目录] 目录 卷一 ◎论用笔 ◎评法书 ◎跋自书 ◎评古帖 卷二 ◎画诀 ◎画源 ◎题自画 ◎评旧画 卷三 ◎记事 ◎记游 ◎评诗 ◎评文 卷四 ◎杂言上 ◎杂言下 ◎楚中随笔 ◎禅悦 ...
- 书论66 董其昌《画禅室随笔》
目录 卷一 论用笔 评法书 评古帖 卷二 画诀 画源 题自画 评旧画 论画 卷三 记事 记游 评诗 评文 卷四 杂言上 杂言下 楚中随笔 禅悦 卷一 论用笔 米海岳书,无垂不缩,无往不收.此八字真言, ...
最新文章
- ROM、RAM、IROM、IRAM、DRAM、SRAM、Flash介绍
- C++实现学生成绩管理系统
- linux 安装库 编译提示-lcrypto 无法链接,缺少 crypto 库
- 关于报表中汇率转换的问题
- Java Bootstrap:Dropwizard与Spring Boot
- 《人人都是产品经理》读后感
- sharding分表后主键_分库分表【Sharding-JDBC】入门与项目实战
- 企业要做有价值的私域流量三大关键
- 深入分析AsyncTask
- PHP导出MySQL数据字典 Summer-Mysql-Dic
- mysql not in 或 in 优化
- 【优化预测】基于matlab狼群算法优化BP神经网络预测【含Matlab源码 658期】
- 使用MagicRecon在挖洞时最大化数据收集量
- 一分钟快速了解内网穿透软件有哪些
- ideaIU-2019.3.3 百度云下载链接
- 维基百科的语料库下载以及后续操作(一)2020年6月【包括opencc下载避雷,繁转简】
- iOS开发APP瘦身之PDF图片资源加载框架
- Unity中的角色属性芒星比例图
- 每月缴的个税,你知道怎么算的吗?
- 标准库之正则表达式3-前后向管理
热门文章
- Linux 系统启动流程图/系统初始化流程图
- Linux 命令之 iwlist 命令-从无线网卡获取更详细的无线信息
- python实现var模型_copula函数及其Var计算的Python实现
- 网络位置可以看到另一个人的电脑_计算机组成原理(一)- 冯·诺依曼体系结构...
- mysql的锁是公平的么_lock 默认公平锁还是非公平锁?公平锁是如何定义?如何实现...
- C++ 11 深度学习(九)C++文件IO
- python2.7.10安装教程_Linux系统(CentOS)下python2.7.10安装
- js压缩图片_Web 性能优化: 图片优化让网站大小减少 62%
- 有没有code能改xml内容_Spring源码解析-applicationContext.xml加载和bean的注册
- css初始化_利用CSS变量实现炫酷的悬浮效果