HNOI2012 永無鄉 線段樹合併 並查集

2021-09-29 03:58:26 字數 902 閱讀 2099

傳送門

其實很裸,用並查集維護每個點的資訊已經別合併到哪個線段樹裡面了,然後權值線段樹查第k大就行。

我一開始和*****地沒用並查集,然後發現rt沒有傳遞性。

寫著寫著反應過來,,其實一開始也可以這麼寫,,用rt當並查集用就行,,我感覺更*****了。

#includeusing namespace std;

#define in read()

int in

while(isdigit(ch))return cnt*f;

}int n,m,rank[100003],rt[100003];

struct nodet[3000003];int tot;

void modify(int &u,int l,int r,int key)

int merge(int u,int v)int belong[100003];

int query(int u,int l,int r,int k)

int mid=(l+r)>>1,ls=t[t[u].l].size;

if(k<=ls)return query(t[u].l,l,mid,k);

else return query(t[u].r,mid+1,r,k-ls);

}void debug(int u,int l,int r)int fa[100003];

int find(int x)

signed main()int q=in;

for(int i=1;i<=n;i++)char ch[3];int x,y;

while(q--)

int gu=query(rt[x],1,n,y);//cout<<"gu "

} return 0;

}

線段樹合併 HNOI2012 永無鄉

問題 b hnoi2012 永無鄉 時間限制 1 sec 記憶體限制 128 mb 提交 50 解決 28 提交 狀態 討論版 題目描述 永無鄉包含 n 座島,編號從 1 到 n,每座島都有自己的獨一無二的重要度,按照重要度可 以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連...

HNOI2012 永無鄉 題解

對於每乙個點先建立乙個權值線段樹,之後並查集維護 更改連通性。不知道權值線段樹是啥的戳我 聯通就直接把祖先連起來然後合併線段樹 include include using namespace std const int n 100005 int size n 20 n,m,fa n type,q,r...

HNOI2012 永無鄉 splay合併

題目描述 永無鄉包含 n 座島,編號從 1 到 n 每座島都有自己的獨一無二的重要度,按照重要度可以將這 n 座島排名,名次用 1 到 n 來表示。某些島之間由巨大的橋連線,通過橋可以從乙個島到達另乙個島。如果從島 a 出發經過若干座 含 0 座 橋可以 到達島 b 則稱島 a 和島 b 是連通的。...