Brief description :
… 略. .
Analysis :
… 略 ..
/** ` Micro Mezzo Macro Flation -- Overheated Economy ., **/
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define REP_1(i, n) for (int i=1;i<=int(n);++i)
#define DO_C(n) int n____ = n; while(n____--)
template<class T> inline void RD(T &x){char c; for (c = getchar(); c < '0'; c = getchar()); x = c - '0'; for (c = getchar(); c >= '0'; c = getchar()) x = x * 10 + c - '0';}
inline int RD(){ int x; RD(x); return x;}
inline void RS(char *s){scanf("%s", s);}
template<class T> inline void RST(T &A){memset(A, 0, sizeof(A));}
template<class T0, class T1, class T2> inline void RST(T0 &A0, T1 &A1, T2 &A2){RST(A0), RST(A1), RST(A2);}
template<class T> inline void OT(const T &x){printf("%d\n", x);}
/* .................................................................................................................................. */
const int N = 50009;
int l[N], r[N], p[N]; bool rt[N];
int n;
#define lx l[x]
#define rx r[x]
inline void Set(int l[], int y, int x){
l[y] = x, p[x] = y;
}
inline void Rotate(int x){
int y = p[x], z = p[y];
if (!rt[y]) Set(y == l[z] ? l : r, z, x);
else p[x] = z;
if (x == l[y]) Set(l, y, rx), Set(r, x, y);
else Set(r, y, lx), Set(l, x, y);
if (rt[y]) rt[y] = false, rt[x] = true;
}
inline void Splay(int x){
while (!rt[x]) Rotate(x);
}
int Access(int x){
int y = 0; do{
Splay(x);
rt[rx] = true, rt[rx = y] = false;
x = p[y = x];
} while (x);
return y;
}
inline int Root(int x){
for (x = Access(x); lx ; x = lx);
return x;
}
inline int Lca(int x, int y){
int lca; Access(y); y = 0; do{
Splay(x); if (!p[x]) lca = x;
rt[rx] = true, rt[rx = y] = false;
x = p[y = x];
} while (x);
return lca;
}
// Public :
void Link(int y, int x){
if (y && (x == y || Root(x) == Root(y) && Lca(x, y) == x)) return;
Access(x), Splay(x), rt[lx] = true;
lx = p[lx] = 0, p[x] = y;
Access(x);
}
int main(){
//freopen("in.txt", "r", stdin);
//freopen("out.txt", "w", stdout);
bool first_blood = true;
while (scanf("%d", &n) != EOF){
// Initializing Phase ...
if (first_blood) first_blood = false; else puts("");
REP_1(i, n) rt[i] = true, RD(p[i]);
// Interaction Phase ...
char cmd[9]; DO_C(RD()){
RS(cmd); if (cmd[0] == 'Q') OT(Root(RD()));
else Link(RD(), RD());
}
// Rececling ....
RST(p, l, r);
}
}




Alca
Amber
Belleve Invis
Chensiting123
Edward_mj
Fotile96
Hlworld
Kuangbin
Liyaos
Lwins
LYPenny
Mato 完整版
Mikeni2006
Mzry
Nagatsuki
Neko13
Oneplus
Rukata
Seter
Sevenkplus
Sevenzero
Shirleycrow
Vfleaking
wangzhpp
Watashi
WJMZBMR
Wywcgs
XadillaX
Yangzhe
三途川玉子
About.me
Vijos
