樹狀陣列 飄雪聖域

2021-09-11 02:02:57 字數 1111 閱讀 1213

沒找到傳送門(這是校內的)

題意:給一棵樹,多次詢問編號在l到r中的點組成的連通塊個數

考試的時候一直在想奇怪的做法,用的都是樹上維護的知識(比如已經被某c姓神仙卡掉的虛樹+樹剖+二分)

其實這道題根本不需要樹上的知識

首先要知道乙個區間的連通塊個數等於點數-邊數(無重邊自環的情況)

然後問題就變成了要求端點乙個區間內的邊數了,這是乙個二維偏序問題

所以先對一維進行排序,另一維用樹狀陣列查詢就a了

code:

#include

using

namespace std;

inline

intread()

while

(isdigit

(ch)

)return res*f;

}const

int n=

200005

;int n,q,tr[n]

,ans[n]

;struct seqe[n]

,s[n]

;inline

bool

cmp(seq x,seq y)

inline

void

add(

int k,

int v)

inline

intask

(int k)

intmain()

sort

(e+1

,e+n,cmp)

;for

(int i=

1;i<=q;i++

) s[i]

.l=read()

,s[i]

.r=read()

,s[i]

.id=i;

sort

(s+1

,s+q+

1,cmp)

;int now=1;

for(

int i=

1;i<=q;i++

)for

(int i=

1;i<=q;i++

) cout<<<

"\n"

;return0;

}

飄雪聖域 樹狀陣列 二維偏序

首 先要 知道 首先要知道 首先要知道 若給定乙個區間 l,r l,r l,r 設一條邊的小端點為 u uu,大端點為 vvv,滿足條件 l u andv rl le u and v le r l uand v r 的邊數為 num numnu m,則聯通塊數量為 r l 1 n umr l 1 n...

飄雪聖域(icekingdom)

iceprincess 1968 和iceprince 1968 長大了,他們開始協助國王 iceking 1968 管理國內事物。iceprincess 1968 和iceprince 1968 住在乙個寧靜悠遠的王國 icekingdom 飄雪聖域。飄雪聖域有 n 個城鎮,編號 1,2,3.n ...

WOJ4379 飄雪聖域 主席樹

傳送門 每次詢問點的個數是r l 1,那麼聯通塊個數就是總點數減去邊的個數 考慮哪些邊有貢獻,令邊為l,r l有時靜態區間,然後就是主席樹 include define n 200050 using namespace std struct nodet n 40 int tot,rt n vecto...