【题目描述】

树链剖分可以干什么?

“可以支持在树中快速修改一个点信息,快速询问一条链信息”

LCT可以干什么?

“可以支持树链剖分支持的特性,并且支持快速链接两个棵树,或者断开某条边”

那我现在要出一道关于树的题目,一开始有n个点,每个点自成一颗树,所以现在有n棵树。每个点有一个权值。有以下这些操作类型:

连接操作:1 a b,连接a和b,使a成为b的儿子结点,a一定是某个树的根节点。这样就把两个数连接到一起,此时a以及所有后代的根节点均为b所在树的根节点。

询问操作:2 a,询问a到自己所在树的根节点所有在路径(包括自己和根节点)上的所有点的权值的异或和。

恩...但是由于我懒,所以还没有造数据,请你帮我写个标程让我用来造数据吧。

【输入格式】

第一行两个整数n和m,表示有n个点和m个操作。

接下有一行n个整数,第i个整数表示第i个点的权值。

接下来m行,每行为三个整数1 a b,或者2 a。

如果是1 a b表示这是一个连接操作,意义见题目。

如果是2 a表示这是一个询问操作,意义见题目。

【输出格式】

对于每个询问操作,输出一行,表示从a到根节点路径上所有点的权值的异或和。

【样例输入】

5 8
1 2 3 4 5
2 2
1 2 1
2 2
1 4 3
1 3 2
2 3
1 5 1
2 5

【样例输出】

2
3
0
4

【提示】

样例解释

样例中每个节点权值与标号相同

第一个询问中2的根节点是自己,所以第一个询问2节点的答案为0

第二个询问中2的根节点是1,路径为2-1,所以答案为2 xor 1 = 3

第三个询问中3到根节点的路径为3-2-1,所以答案为3 xor 2 xor 1 = 0

第四个询问中5到根节点的路径为5-1,所以答案为5 xor 1 = 4

数据范围

对于40%的数据1 <= n,m <= 1000

对于90%的数据1 <= n <= 100000, 1 <= m <= 200000

对于100%的数据1 <= n <= 300000, 1 <= m <= 500000

所有节点的权值均为正整数且在int范围内

题解:

  带权并查集,考试的时候没想出出来,真是脑抽,为什么可以用并查集呢?因为他只要维护路径上的总和,并且刚好也只有合并和查询两个操作,不过主要还是因为只有维护路径上的信息。

  具体怎么做?可以考虑将点权付给边权。记s[i]表示i节点到根节点的亦或合,然后每次合并两棵树时只要将被合并的点的点权付给边权即s[x]=quan[x];(quan[x]是点权),合并路径是只要将两段路径抑或起来就可以了。即s[now]=s[now]^s[fa[now]],最后因为是边权,没有算根节点,输出答案时在亦或一下就可以了。

代码:

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <iostream>
#define ll long long
#define MAXN 100010
#define MAXN2 500000
using namespace std;
int quan[MAXN2*],s[MAXN2*],fa[MAXN2*];
int n,m,num=,hhh; int find(int now){
if(fa[now]!=now) hhh=find(fa[now]);
else hhh=fa[now];
s[now]=s[now]^s[fa[now]];
fa[now]=hhh;
return fa[now];
} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) {
scanf("%d",&quan[i]);
fa[i]=i;
}
for(int i=;i<=m;i++){
int id,x,y;
scanf("%d",&id);
if(id==){
scanf("%d",&x);
int hh=find(x);
printf("%d\n",s[x]^quan[hh]);
}
else{
scanf("%d%d",&x,&y);
fa[x]=y;
s[x]=quan[x];
}
}
return ;
}

COGS 2089. 平凡的测试数据的更多相关文章

  1. [COGS 2089.] 平凡的测试数据 带权并查集

    差点就撸上LCT了....... 带权并查集就是在并查集的基础上稍作修改,我的用穿址实现的有人用记录原父亲来实现. #include<cstdio> #define N 300010 us ...

  2. COGS 2096. 不平凡的许愿树

    [题目描述] noip要到了,大家来到许愿树前.这个许愿树不仅仅是许愿树,还有未卜先知的功能.众OIer问许愿树:“不平凡的许愿树,CCF告诉我们noip中会有两道题目从Openjudge上选择,你能 ...

  3. COGS 2095. 不平凡的引线

    2095. 不平凡的引线 ★☆   输入文件:firelead.in   输出文件:firelead.out   简单对比 时间限制:1 s   内存限制:256 MB [题目描述] 这里说的引线是炮 ...

  4. 【COGS & USACO Training】710. 命名那个数字(hash+水题+dfs)

    http://cojs.tk/cogs/problem/problem.php?pid=710 近日开始刷水... 此题我为了练一下hash...但是hash跑得比暴力还慢.. 不言而喻... #in ...

  5. FZU 2089 数字游戏

    Problem 2089 数字游戏  Problem Description 现在,给你2个整形数字A和B.你的任务就是计算出A+B的结果C后,统计C中数字5出现的次数.  Input 输入数据第一行 ...

  6. COGS 栅格网络流

    750. 栅格网络流 http://www.cogs.pro/cogs/problem/problem.php?pid=750 ★★☆   输入文件:flowa.in   输出文件:flowa.out ...

  7. Dijkstra TYVJ 1031热浪 Dijkstra测试数据

    测试用邻接表写得Dijkstra 代码写得很烂. 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer Jo ...

  8. Mysql 如何批量插入百万行测试数据

    Mysql 如何批量插入百万行测试数据

  9. SQLServer生成三位姓名及11位国内电话号码(生成测试数据用)

    SELECT SUBSTRING(N'王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林郑谢罗梁宋唐许韩冯邓曹彭曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦付方白邹孟熊秦邱江尹薛闫段雷侯龙 ...

随机推荐

  1. [DP]换钱的方法数

    题目三 给定数组arr, arr中所有的值都为整数且不重复.每个值代表一种面值的货币,每种面值的货币可以使用任意张,在给定一个整数aim代表要找的钱数,求换钱有多少种方法. 解法一 --暴力递归 用0 ...

  2. Linux基础提高_系统性能相关命令

    w 看系统的负载信息 用于显示已经登陆系统的用户列表,并显示用户正在执行的指令 uptime [root@localhost]#uptime 17:26:07 up 9:02, 3 users, lo ...

  3. 【LeetCode】215-数组中的第K个最大元素

    题目描述 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6,4] 和 k = 2 ...

  4. mybatis 生成代码配置 mybatis-generator:generate 的使用详解

    一.环境 mysql+eclipse 二.代码配置 pom.xml <?xml version="1.0" encoding="UTF-8"?> & ...

  5. 完整剖析SpringAOP的自调用

    摘要 spring全家桶帮助java web开发者节省了很多开发量,提升了效率.但是因为屏蔽了很多细节,导致很多开发者只知其然,不知其所以然,本文就是分析下使用spring的一些注解,不能够自调用的问 ...

  6. 史上最详 Thymeleaf 使用教程

    前言 操作前建议先参考我的另一篇博客:玩转 SpringBoot 2 快速整合 | Thymeleaf 篇 查看如何在SpringBoot 中使用 Thymeleaf.还有一点需要注意的是:模版页面中 ...

  7. jmeter性能分析

    1.硬件要求:包括客户端和服务端的cpu,mem,network,disk等,这些硬件设备必须满足性能测试的前提下,才能进行性能测试,否则得到的各项指标不一定是正确的 2.场景分析: 测试前的准备工作 ...

  8. 外部服务器使用jedis操作redis数据库

    使用maven获取jedis的包,我本来想去找jedis的jar包的,但是没找到. (maven)     <dependency> <groupId>redis.client ...

  9. ECSHOP完美解决Deprecated: preg_replace()报错的问题

    随着PHP5.5 的普及,ECSHOP系统又爆出了新的错误.PHP发展到PHP5.5版本以后,有了很多细微的变化.而ECSHOP官方更新又太慢,发现这些问题后也不及时升级,导致用户安装使用过程中错误百 ...

  10. 部署Tomcat 环境

    部署Tomcat 环境(mysql+tomcat+jdk) 1.下载Tomcat 软件包 2.通过xftp创建root 连接,然后将Tomcat 软件包拖拽到/opt目录下 3.在xshell 上ro ...