codevs洞穴勘測原題戳這裡
題目大意:
建路 connect u v
毀路 destroy u v
查詢路是否聯通 query u v
用到的幾個基本操作,link,cut,access,reverse,find
/*本題中所用到的ch和fa,為splay樹上的,與原樹沒有關係*/
/*博主個人愛好結構體,不適者可自動yy成陣列*/
#include
#include
#include
#include
using
namespace
std;
inline
int read()
while(ch>='0'&&ch<='9')
return x*f;
}int n,m;
int st[10050];
struct lctt[10050];
int isroot(int x)
void pushdown(int k)
}void rotate(int x)
t[x].fa=z;
t[y].fa=x;
t[t[x].ch[r]].fa=y;
t[y].ch[l]=t[x].ch[r];
t[x].ch[r]=y;
}//一些被注釋掉的部分為正常的splay,博主手殘試了下,不適用於本題,會全t
//bool son(int x)
////
//void point(int x,int fa,bool z)
////
//void rotate(int x)
//void splay(int x)
for(int i=top;i;i--)pushdown(st[i]);
while(!isroot(x))
rotate(x);
}}void access(int x)
}void rever(int x)
void link(int x,int y)
void cut(int x,int y)
int find(int x)
int main()
}return
0;}
SDOI2008 洞穴勘測 LCT
題目描述 輝輝熱衷於洞穴勘測。某天,他按照地圖來到了一片被標記為jszx的洞穴群地區。經過初步勘測,輝輝發現這片區域由n個洞穴 分別編號為1到n 以及若干通道組成,並且每條通道連線了恰好兩個洞穴。假如兩個洞穴可以通過一條或者多條通道按一定順序連線起來,那麼這兩個洞穴就是連通的,按順序連線在一起的這些...
BZOJ2049 洞穴勘測(LCT)
太長也懶得複製了 題目大意就是 給你n個點,這n個點一開始沒有路徑相連,然後給出m個操作,包含三個操作 1.query x,y 詢問x,y之間是否連通。2.connect x,y 在x,y之間連一條邊。3.destroy x,y 將x,y之間的邊刪除。最後對於每個query,如果連通就輸出 yes ...
SDOI2008 洞穴勘測 LCT模板
bzoj 2049 傳送門 洛谷p2147 傳送門 這個大佬的lct詳解超級棒的!link cut tree的基本思路是用splay的森林維護一條條樹鏈。splay的森林,顧名思義,就是若干splay組成的東西。每個splay都有乙個根節點,所以lct裡的splay不能記錄根節點,因為根節點有好多。...