用lct,不要mak
eroo
tmakeroot
makero
ot一棵樹的根節點可能是真的根節點(a[
root
]=0)
(a[root]=0)
(a[roo
t]=0
),也可能這個根節點還指向樹里的另乙個節點(這種情況下a[r
oot]
≠
0a[root]=\not0
a[root
]≠
0)更改指向的時候,先切斷原來的邊,切斷邊之後,可能會破壞乙個環,這時就要讓假的根節點指向它應該指向的節點
切完了之後,再連線
查詢祖先的時候,先找到這顆樹的根節點,然後看下根節點是不是真的根節點(a[
root
]=0)
(a[root]=0)
(a[roo
t]=0
),如果是就輸出其編號;但如果是假的根節點(a[
root
]≠0
)(a[root]=\not 0)
(a[roo
t]≠
0),就輸出−1-1
−1
#include
#define maxn 200010
using
namespace std;
struct linkcuttree
bool
isroot
(int x)
void
maketag_rev
(int x)
void
join
(int x,
int y,
int wh)
void
pushdown
(int x)
}void
rotate
(int x)
void
splay
(int x)if(
getwh
(x)^
getwh
(y))
rotate
(x);
else
rotate
(y);
rotate
(x);}}
void
access
(int x)
}void
makeroot
(int x)
void
link
(int x,
int y)
void
cut(
int x,
int y)
intfindroot
(int x)
}lct;
intread
(int x=0)
int a[maxn]
, n, m;
intmain()
}while
(m--)}
if(y and lct.
findroot
(y)!=x)
a[x]
=y;}
else
}return0;
}
HDU 5967 小R與手機(動態樹)
題目鏈結 題目大意 給出一張圖,每個點僅連一條有向邊,或者不連,要求查詢在可更改有向邊的情況每個點通過有向邊最終能到的終點,如果是個環則輸出 1 題解 我們用lct維護,同時在每棵樹根結點的位置標記環,因為出現環一定在根節點,否則的話只是換直接父節點而不成環,對於換直接父節點的操作,我們看該樹的根是...
R 小知識積累
1 grep 1 a為乙個data frame,取含有rna seq的行 2 index grep rna seq a assay type 3 b a index,2 讀取檔案,選擇不讀哪一行 1 不讀取帶有!的行 2 data read.table file comment.char sep t...
幾個有用的R小函式
最近寫的 基本是r指令碼了,越發感到r的強大。現在用它做一些資料分析以及進行一些模擬。收幾個常的函式在這裡。i.將所有為0的資料替換為100 res2 valuex res2 valuex in 0 ii.將na替換為0 res2 valuex is.na res2 valuex cdf 累積分布函...