飄雪聖域(icekingdom)

2022-08-01 20:09:12 字數 2324 閱讀 3385

iceprincess_1968 

和iceprince_1968 

長大了,他們開始協助國王

iceking_1968 

管理國內事物。

iceprincess_1968 

和iceprince_1968 

住在乙個寧靜悠遠的王國:

icekingdom —— 

飄雪聖域。飄雪聖域有

n 個城鎮,編號

1,2,3...n

。有些城鎮之間有道路,且滿足任意兩點之間有且僅有一條路徑。飄雪聖域風景優美,但氣候並不是太好。根據

iceprince_1968 

的氣候探測儀,將來會發生

q 場暴風雪。每場暴風雪可以用兩個整數

li,ri 

刻畫,表示這場暴風雪之後,只有編號屬於

[li,ri]

的城市沒有受到暴風雪的影響。

在暴風雪的影響下迅速確定王國的農業生產方案是非常重要的事情。

iceking_1968 

認為,乙個農業生產地域應該是乙個極大連通塊,滿足每個節點都沒有被暴風雪影響。這裡極大連通塊的定義是:不存在乙個不屬於該點集的未被暴風雪影響的點與該連通塊連通。

iceprincess_1968 

要負責算出每次暴風雪後,王國能擁有多少個農業生產地域。注意這裡每次暴風雪是獨立的,即每次暴風雪過後,直到每個城鎮重新煥發生機,下一次暴風雪才會到來。

正如上文所述,

iceprincess_1968 

擅長文學但不擅長計算機,於是請你幫忙。

第一行包含兩個正整數

n,q,表示

icekingdom 

的城鎮個數和暴風雪次數。第2

至第n 

行,每行兩個正整數

x,y,

表示城鎮

x 和城鎮

y 之間有一條道路。

第n+1 

至第n+q 

行,每行兩個正整數

li,ri

,描述一場暴風雪,含義如題面所述。

輸出檔案共有

q 行,第

i 行表示在第

i 場暴風雪之後農業生產地域的個數。

4 3

1 22 3

2 41 2

1 33 4

1

12

【輸入輸出樣例

1 解釋】

第一次詢問,只有(

1,2)乙個連通塊。

第二次詢問,只有(

1,2,3

)乙個連通塊。

第三次詢問,有3 和

4 兩個連通塊。

【輸入輸出樣例2】

見選手目錄下的

icekingdom/icekingdom2.in 

和icekingdom/icekingdom2.ans

。【資料規模和約定】

對於30%

的資料:

n<=100,q<=100;對於

50%的資料:

n<=2,000,q<=2,000;對於

100%

的資料:

n<=200,000

,q<=200,000,

對於所有的暴風雪,

li<=ri

。solution

考場時一直從圖的聯通塊來考慮,一直沒想出來

這道題應該從加邊來考慮

比如說詢問區間(l,r)那麼只有起點和終點在l,r裡的邊可以貢獻

我們把邊按較大的點排序,樹狀陣列統計即可

#include#include#include#include#include#include#define maxn 200005

using namespace std;

int n,q,tree[maxn],ans[maxn];

struct nodee[maxn],s[maxn];

bool cmp(node a,node b)

sort(e+1,e+n,cmp);

for(int i=1;i<=q;i++)

sort(s+1,s+q+1,cmp);

int now=1;

for(int i=1;i<=q;i++)

int num=ask(s[i].r)-ask(s[i].l-1);

ans[s[i].id]=s[i].r-s[i].l+1-num;

}for(int i=1;i<=q;i++)printf("%d\n",ans[i]);

return 0;

}

樹狀陣列 飄雪聖域

沒找到傳送門 這是校內的 題意 給一棵樹,多次詢問編號在l到r中的點組成的連通塊個數 考試的時候一直在想奇怪的做法,用的都是樹上維護的知識 比如已經被某c姓神仙卡掉的虛樹 樹剖 二分 其實這道題根本不需要樹上的知識 首先要知道乙個區間的連通塊個數等於點數 邊數 無重邊自環的情況 然後問題就變成了要求...

WOJ4379 飄雪聖域 主席樹

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

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

首 先要 知道 首先要知道 首先要知道 若給定乙個區間 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...