BZOJ2049 洞穴勘測(LCT)

2021-08-28 19:01:38 字數 1582 閱讀 1521

(太長也懶得複製了)

題目大意就是:給你n個點,這n個點一開始沒有路徑相連,然後給出m個操作,包含三個操作:

1.query(x,y):詢問x,y之間是否連通。

2.connect(x,y):在x,y之間連一條邊。

3.destroy(x,y):將x,y之間的邊刪除。

最後對於每個query,如果連通就輸出"yes",否則輸出「no」。

第一行為兩個正整數n和m,分別表示洞穴的個數和終端機上出現過的指令的個數。以下m行,依次表示終端機上出現的各條指令。每行開頭是乙個表示指令種類的字串s("connect」、」destroy」或者」query」,區分大小寫),之後有兩個整數u和v (1≤u, v≤n且u≠v) 分別表示兩個洞穴的編號。

對每個query指令,輸出洞穴u和洞穴v是否互相連通:是輸出」yes」,否則輸出」no」。(不含雙引號)

connect 1 2

connect 3 1

query 2 3

destroy 1 3

query 2 3

yesno

10%的資料滿足n≤1000, m≤20000

20%的資料滿足n≤2000, m≤40000

30%的資料滿足n≤3000, m≤60000

40%的資料滿足n≤4000, m≤80000

50%的資料滿足n≤5000, m≤100000

60%的資料滿足n≤6000, m≤120000

70%的資料滿足n≤7000, m≤140000

80%的資料滿足n≤8000, m≤160000

90%的資料滿足n≤9000, m≤180000

100%的資料滿足n≤10000, m≤200000

保證所有destroy指令將摧毀的是一條存在的通道

本題輸入、輸出規模比較大,建議c\c++選手使用scanf和printf進行i\o操作以免超時

很裸的一道lct題,命令只包含findroot、link、cut操作(但還是要把操作寫完qaq)

#includeusing namespace std;

const int maxn=1e4+10;

int n,m,u,v,qr,que[maxn];

struct nodetr[maxn];

bool which(const int &x)

bool isroot(const int &x)

void push_down(const int &root)

}void rotate(const int &x)

void splay(const int &x)

rotate(x); }}

void access(int x)

}int findroot(int x)

void makeroot(int x)

void link(const int &x,const int &y)

void cut(const int &x,const int &y)

int read()

int main()

else

}return 0;

}

LCT 洞穴勘測

codevs洞穴勘測原題戳這裡 題目大意 建路 connect u v 毀路 destroy u v 查詢路是否聯通 query u v 用到的幾個基本操作,link,cut,access,reverse,find 本題中所用到的ch和fa,為splay樹上的,與原樹沒有關係 博主個人愛好結構體,不...

BZOJ2049 SDOI2008 洞穴勘測

description 輝輝熱衷於洞穴勘測。某天,他按照地圖來到了一片被標記為jszx的洞穴群地區。經過初步勘測,輝輝發現這片區域由n個洞穴 分別編號為1到n 以及若干通道組成,並且每條通道連線了恰好兩個洞穴。假如兩個洞穴可以通過一條或者多條通道按一定順序連線起來,那麼這兩個洞穴就是連通的,按順序連...

SDOI2008 洞穴勘測 LCT

題目描述 輝輝熱衷於洞穴勘測。某天,他按照地圖來到了一片被標記為jszx的洞穴群地區。經過初步勘測,輝輝發現這片區域由n個洞穴 分別編號為1到n 以及若干通道組成,並且每條通道連線了恰好兩個洞穴。假如兩個洞穴可以通過一條或者多條通道按一定順序連線起來,那麼這兩個洞穴就是連通的,按順序連線在一起的這些...