(太長也懶得複製了)
題目大意就是:給你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 以及若干通道組成,並且每條通道連線了恰好兩個洞穴。假如兩個洞穴可以通過一條或者多條通道按一定順序連線起來,那麼這兩個洞穴就是連通的,按順序連線在一起的這些...