hdu5967 小R與手機

2021-09-25 16:44:35 字數 1600 閱讀 4519

用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 累積分布函...