1. 程式人生 > >CoderForces Round526F Max Mex(倍增求LCA+線段樹路徑合併)

CoderForces Round526F Max Mex(倍增求LCA+線段樹路徑合併)

Max Mex time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output

Once Grisha found a tree (connected graph without cycles) with a root in node 1.

But this tree was not just a tree. A permutation p of integers from 0 to n1 is written in nodes, a number pi is written in node i.

As Grisha likes to invent some strange and interesting problems for himself, but not always can solve them, you need to help him deal with two types of queries on this tree.

Let's define a function MEX(S), where S is a set of non-negative integers, as a smallest non-negative integer that is not included in this set.

Let l be a simple path in this tree. So let's define indices of nodes which lie on l as u1u2uk.

Define V(l) as a set {pu1pu2 , puk}.

Then queries are:

  1. For two nodes i and j, swap pi and pj.
  2. Find the maximum value of MEX(V(l)) in all possible l.
Input

The first line contains a single integer n (2n2105) — the number of nodes of a tree.

The second line contains n integers — p1p2pn (0pi<n) — the permutation p, it's guaranteed that all numbers are different .

The third line contains n1 integers — d2d3dn (1di<i), where di is a direct ancestor of node i in a tree.

The fourth line contains a single integer q (1q2105) — the number of queries.

The following q lines contain the description of queries:

At the beginning of each of next q lines, there is a single integer t (1 or 2) — the type of a query:

  1. If t=1, the line also contains two integers i and j (1i,jn) — the indices of nodes, where values of the permutation should be swapped.
  2. If t=2, you need to find the maximum value of MEX(V(l)) in all possible l.
Output

For each type 2 query print a single integer — the answer for this query.

Examples input Copy
6
2 5 0 3 1 4
1 1 3 3 3
3
2
1 6 3
2
output Copy
3
2
input Copy
6
5 2 1 4 3 0
1 1 1 3 3
9
2
1 5 3
2
1 6 1
2
1 4 2
2
1 1 6
2
output Copy
3
2
4
4
2

Number written in brackets is a permutation value of a node.

In the first example, for the first query, optimal path is a path from node  1 to node 5. For it, set of values is {0,1,2} and MEX is 3.
For the third query, optimal path is a path from node 5 to node 6. For it, set of values is {0,1,4} and MEX is 2.
In the second example, for the first query, optimal path is a path from node 2 to node 6. For it, set of values is {0,1,2,5} and MEX is 3.
For the third query, optimal path is a path from node 5 to node 6. For it, set of values is {0,1,3} and MEX is 2.
For the fifth query, optimal path is a path from node 5 to node 2. For it, set of values is {0,1,2,3} and MEX is 4.
For the seventh query, optimal path is a path from node 5 to node 4. For it, set of values is {0,1,2,3} and MEX is 4. src="https://codeforces.com/predownloaded/8f/b7/8fb73f1d5de495d91e704f41ae1a13c55273c659.png" alt="" width="261" height="302" /> For the ninth query, optimal path is a path from node 6 to node 5. For it, set of values is {0,1,3} and MEX is 2.

相關推薦

CoderForces Round526F Max Mex(倍增LCA+線段路徑合併)

Max Mex time limit per test 3 seconds memory limit per test 256 megabytes input standard input

樹上倍增LCA

oid void for print names != ostream tmp iostream 大概思想就是,節點$i$的第$2^{j}$個父節點是他第$2^{j-1}$個父親的第$2^{j-1}$個父親 然後可以$O(nlogn)$時間內解決…&hell

tarjan,剖,倍增lca

next 訪問 find int ext for pac using ins 1.tarjan求lca Tarjan(u)//marge和find為並查集合並函數和查找函數 { for each(u,v) //訪問所有u子節點v    {  

倍增LCA

etc ++ sin bre i++ printf floor break truct #include<bits/stdc++.h> using namespace std; struct node{ int to,next,w; }e[100000

洛谷3379 倍增LCA

#include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #define ll long long using namespace std; const ll maxn=

圖論——倍增LCA

LCA,最近公共祖先。 這是在樹上的演算法,但是為什麼我們把它歸為圖論呢? 因為它對圖論太重要了,其實,樹也是圖,是任意二節點只有一條路徑的圖。 我們來看一下LCA的栗子: 這就是LCA,很好理解吧! 那問題來了,怎麼實現求兩點的LCA呢? 其實很簡單,用暴力法就可以了。先用樹的DFS遍歷求出樹的深度,在

【模板】樹上倍增LCA

參考題目:Tree 題目描述 給出一棵帶有邊權的樹,問兩點之間的距離。 輸入格式 第一行兩個整數 n 和 m ,分別表示點數和詢問數。 接下來 n-1 行,每行三個整數 x,y,z,表示 x 與 y 通過一條權為 z 的邊連線。 接下來 m 行,每行兩個整數 x

樹上倍增LCA及例題

先瞎扯幾句 樹上倍增的經典應用是求兩個節點的LCA 當然它的作用不僅限於求LCA,還可以維護節點的很多資訊 求LCA的方法除了倍增之外,還有樹鏈剖分、離線tarjan ,這兩種日後再講(眾人:其實是你不會吧:unamused:。。。) 思想 樹上倍增嘛,顧名思義就是倍增 相信倍增大家都不預設,

倍增LCA模板

1.引入 2.思路 這道題目是倍增求LCA的模板題。 首先,大家都知道LCA的定義吧?(兩個節點的公共父節點)如果我們求兩個點的LCA的使用暴力求解(DFS找出要求點的深度,一個一個往上跳,一次一次查詢),在卡時間的競賽中是肯定會炸掉的。那麼,我們就使用另一種方法,

LCA+線段 NOIP2016 天天愛跑步

art swa 單獨 編譯 如果 建立 const 會有 void 天天愛跑步 題目描述 小c同學認為跑步非常有趣,於是決定制作一款叫做《天天愛跑步》的遊戲。?天天愛跑步?是一個養成類遊戲,需要玩家每天按時上線,完成打卡任務。 這個遊戲的地圖可以看作一一棵包含 nnn個結

【題解】[牛客網NOIP賽前集訓營-提高組(第一場)]C.保護 LCA+線段動態開點+線段合併

題目連結 ___ #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int N=2e5+10; int n,m,hd[N],to

POJ 4718 /// 鏈剖分+線段區間合併 樹上兩點間的LCIS長度

題目大意: 給定n個點 每個點都有權值 接下來給定樹的n條邊 第 i 個數 a[i] 表示 i+1到a[i]之間 有一條邊 給定q q個詢問 每次詢問給出 x y 求x到y的最長上升子序列的長度   題解 https://blog.csdn.net/forever_wjs/article/

H - Tourism on Mars URAL - 2109 -LCA-線段

H - Tourism on Mars  URAL - 2109  題意:給你 n 個點,接下來 n-1 行,每行輸入 u, v 代表 u 點和 v 點無向邊。 有 q 次詢問。  u 到 v 的道路中,距離 1 點最近的點,是main a

[BZOJ3307]雨天的尾巴(LCA + 線段合併

Address 洛谷 P4556 BZOJ 3307 Solution 首先轉化一下問題,考慮一種顏色 c

Codeforces-1062E:Company(LCA+線段

E. Company time limit per test 2 seconds memory limit per test 256 megabytes inputstandard input outputstandard output The company

LCA剖知識點

不太優美但是有註釋的版本: #include<cstdio> #include<iostream> using namespace std; struct edge{ int to,ne; }e[1000005]; int n,m,s,ecnt,head[500005]

BZOJ4556:[Tjoi2016&Heoi2016]字串 (字尾自動機+樹上倍增+二分答案+線段合併

題目分析:我發現我對線段樹合併一無所知QAQ。 先講一種簡單的做法:我們可以將字尾陣列建出來,對於每個詢問二分一個答案mid。然後從Rank[c]往上下兩個方向跳,找到一個區間[L,R],使得這個區間的字尾和c開頭的字尾的LCP大於等於mid。那麼如果

HDU - 1540 Tunnel Warfare 線段區間合併與棧的結合

During the War of Resistance Against Japan, tunnel warfare was carried out extensively in the vast areas of north China Plain. Generally speaking, vil

HDU - 4553 約會安排 線段 區間合併

 寒假來了,又到了小明和女神們約會的季節。    小明雖為屌絲級碼農,但非常活躍,女神們常常在小明網上的大段發言後熱情回覆“呵呵”,所以,小明的最愛就是和女神們約會。與此同時,也有很多基友找他開黑,由於數量實在過於巨大,怎麼安排時間便成了小明的一大心事。    我們已知小明一共有

HDU - 3911 Black And White 線段 區間合併

There are a bunch of stones on the beach; Stone color is white or black. Little Sheep has a magic brush, she can change the color of a continuous ston