寻找根节点很容易让人联想到DisjointSet,但是DisjointSet只有合并操作, 所以询问离线倒着考虑,标记会一个一个消除,这时候就变成合并了. 因为询问和查询的时间以及标记生效的时间有关,记录下查询时间,在树上记录的标记.(没有做标记的默认为最大询问时间+1,根节点为0 在Find的时候根据询问的时间进行回答. 路径压缩会影响到答案吗?并不会,因为压缩的时候,标记一定已经失效了. (答案会爆int,这种问题无非就是在路径上做一些改动,类似比如UVA 11987 Almost Unio…
http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=45522 给定一棵树的n个节点,每个节点标号在1到n之间,1是树的根节点,有如下两种操作: M v :把编号为v的节点标记. Q v :查询与v节点距离最近的被标记的点的编号.最初只有根节点被标记. 输入n-1个数表示,每一个数是当前第i个数的父节点,输出对于每个查询得到标号的总和. 并查集与树的结合,在输入的时候就可以根据父节点的关系建立并查集,1的父亲是1. 还有把编号为…
题意: 给你一颗N个节点的树,节点编号1到N.1总是节点的根.现在有两种操作: M v: 标记节点v Q v: 求出离v最近的标记的相邻节点.根节点一开始就标记好了. 现在给一系列操作,求出所有Q操作结果的和. 思路: 最坏情况下为整棵树成为一条链,单纯使用并查集(无压缩)查询复杂度最坏1e10.单纯使用并查集也能过. 正解应该是将查询存下来,存下每次Q操作的查询时间和查询结点,用qt和qv数组存储.另外设置mark数组存储这个结点被染色的最快时间.然后我们倒着进行查询操作,当当前查询的结点最早…
题意: 有一个树,有些节点染色,每次有两种操作,第一,统计该节点到离它最近的染色父亲结点的的号码(Q),第二,为某一个节点染色(M),求第一种操作和. 输入: 输入由多个数据集组成.每个数据集都有以下格式:输入的第一行包含两个整数N和Q,分别表示树T中的节点数和操作数.这些数字满足以下条件:1≤N≤100000和1≤Q≤100000.下面的N-1行,每行包含一个整数pi(i = 2,...,N),它表示第i个节点的父节点的编号.接下来的Q行按顺序包含操作.每个操作都格式化为“M v”或“Q v”…
https://vjudge.net/problem/Aizu-2170 并查集用于管理元素分组情况. 建树pre[]记录父节点,一开始只有结点1被标记了,所以find()最终得到的根都是1. 如果遇到M操作,即将树断开(很神奇的操作). #include<iostream> #include<cstdio> #include<queue> #include<cstring> #include<algorithm> #include<cma…
A Bug's Life Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 13709    Accepted Submission(s): 4449 Problem Description Background Professor Hopper is researching the sexual behavior of a rare…
http://poj.org/problem?id=2236 由于发生了地震,有关组织组把一圈电脑一个无线网,但是由于余震的破坏,所有的电脑都被损坏,随着电脑一个个被修好,无线网也逐步恢复工作,但是由于硬件的限制,一台电脑和另一台电脑能够相连当他们之间的距离小于d,或者还有一台电脑当中介,分别与两台电脑相连. 在修复的过程中,工作者会有两种操作,修复电脑和询问电脑a和电脑b是否相连.当询问的时候输出答案. 因为输入数据很大,需要快速判断电脑a和电脑b相连,所以自然想到用并查集. 初始时候 全部电…
Problem Description Luxer is a really bad guy. He destroys everything he met.  One day Luxer went to D-city. D-city has N D-points and M D-lines. Each D-line connects exactly two D-points. Luxer will destroy all the D-lines. The mayor of D-city wants…
HDU1213How Many Tables Problem Description Today is Ignatius' birthday. He invites a lot of friends. Now it's dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all…
题目链接:http://poj.org/problem?id=2236 题目大意:城市网络由n台电脑组成,因地震全部瘫痪,现在进行修复,规定距离小于等于d的电脑修复之后是可以直接相连 进行若干操作,O a,修复编号为a的电脑,S a,b  询问a,b电脑能否联系 思路分析:并查集,只是和并条件变了,首先要已经被修复(vis数组)其次距离要小于d,并查集搞完之后 询问的时候只需要看他们是不是有着相同的根节点即可. 代码: #include <iostream> #include <cstd…