藍橋杯2023年第五屆 套娃 線段樹 dfs序

2021-09-23 06:17:18 字數 2331 閱讀 7792

題目描述

作為 drd 送的生日禮物,atm 最近得到了乙個俄羅斯娃娃。他對這個俄羅斯娃娃的構造很感興趣。

俄羅斯娃娃是一層一層套起來的。假設:乙個大小為 x 的俄羅斯娃娃裡面可能會放任意多個大小小於 x 的俄羅斯娃娃(而市場上的套娃一般大娃裡只能放乙個小娃)。

drd 告訴 atm ,這個俄羅斯娃娃是由 n 個小娃娃組成的,它們的大小各不相同。    我們把這些小娃娃的大小從小到大依次記為 1 到 n 。

如果 atm 想觀賞大小為 k 的小娃娃,他會先看這個小娃娃是否已經在桌子上了。    如果已經在桌子上,那麼他就可以觀賞了。否則他就開啟桌子上某乙個俄羅斯娃娃,將它套住的所有的小娃娃拿出來,擺在桌子上。

一開始桌子上只有 drd 送的大小為 n 的娃娃。注意,他只會將其中所有小娃娃拿出來,如果小娃娃裡面還套著另外的小娃娃,他是不會將這些更裡層的這些小娃娃拿出來的。

而且 atm 天生具有最優化的強迫症。他會最小化他所需要開啟的娃娃的數目。

atm 是乙個怪人。有時候他只想知道**大小為 x 的娃娃時需要開啟多少個娃娃(但並不去開啟);有時候聽 drd 說某個娃娃特別漂亮,於是他會開啟看。現在請你輸出他每次需要開啟多少個娃娃。

【輸入格式】

第一行兩個數 n m ,表示娃娃的數目以及 atm 想看的娃娃的數目。

接下來 n - 1 行,每行兩個數 u v,表示大小為 u 的娃娃裡面套著乙個大小為 v 的娃娃。保證 u > v 。

接下來 m 行,每行形如:

p x :表示 atm 一定要看到大小為 x 的娃娃;

q x :表示 atm 只想知道為了看大小為 x 的娃娃,他需要開啟多少個娃娃,但實際上並不開啟他們。

【輸出格式】

輸出 m 行。對應輸入中p操作或q操作需要開啟(或假想開啟)多少個俄羅斯娃娃。

【樣例輸入】

5 55 3

5 43 2

3 1q 1

q 4p 2

q 1q 4

【樣例輸出】21

200【資料範圍】

對於 30% 的資料:n, m <= 1000

對於 100% 的資料:n, m <= 100000

題解:首先說一下,這個**不對,但我絕對思路沒啥問題,感覺是資料問題,emmm,思路就是,先跑一遍dfs序,如果是拆的話,就直接先遞迴到分支的根節點,然後在掃下來,對應的每乙個分支相應的減一,因為他們的父輩減少了,首先這樣是不會超時的,因為每個點只會處理一次,然後就是線段樹區間更新單點查詢,看了資料了,很大,沒法自己算,和某些結果要麼一樣,要麼差一,感覺還是資料有點問題

別粘**,別粘**!!!!某些oj過不了

#includeusing namespace std;

const int n=1e5+10;

struct nodee[n*2];

struct node1tree[n<<2];

int head[n],len;

int n,m;

int f[n],ans[n];

int in[n],out[n],cnt;

int p[n];

void add(int x,int y)

void dfs(int u)

out[u]=cnt;

}void build(int l,int r,int cur)

int mid=(r+l)>>1;

build(l,mid,cur<<1);

build(mid+1,r,cur<<1|1);

}void pushdown(int cur)

}void update(int pl,int pr,int cur,int val)

pushdown(cur);

if(pl<=tree[cur<<1].r) update(pl,pr,cur<<1,val);

if(pr>=tree[cur<<1|1].l) update(pl,pr,cur<<1|1,val);

}int query(int pos,int cur)

pushdown(cur);

if(pos<=tree[cur<<1].r) return query(pos,cur<<1);

else return query(pos,cur<<1|1);

}int tt[n];

int main()

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

}build(1,n,1);

char op[2];

int tmp;

int l;

while(m--)

else

while(l)

l--;}}

}return 0;

}

藍橋杯 2023年第五屆真題 套娃

時間限制 1sec 記憶體限制 128mb 提交 5 解決 0 題目描述 作為 drd 送的生日禮物,atm 最近得到了乙個俄羅斯娃娃。他對這個俄羅斯娃娃的構造很感興趣。俄羅斯娃娃是一層一層套起來的。假設 乙個大小為 x 的俄羅斯娃娃裡面可能會放任意多個大小小於 x 的俄羅斯娃娃 而市場上的套娃一般...

藍橋杯 2023年第五屆真題 分糖果

問題描述 有n個小朋友圍坐成一圈。老師給每個小朋友隨機發偶數個糖果,然後進行下面的遊戲 每個小朋友都把自己的糖果分一半給左手邊的孩子。一輪分糖後,擁有奇數顆糖的孩子由老師補給1個糖果,從而變成偶數。反覆進行這個遊戲,直到所有小朋友的糖果數都相同為止。你的任務是 在已知的初始糖果情形下,老師一共需要補...

2023年第五屆藍橋杯C B組H題

長100厘公尺的細長直桿子上有n只螞蟻。它們的頭有的朝左,有的朝右。每只螞蟻都只能沿著桿子向前爬,速度是1厘公尺 秒。當兩隻螞蟻碰面時,它們會同時掉頭往相反的方向爬行。這些螞蟻中,有1只螞蟻感冒了。並且在和其它螞蟻碰面時,會把感冒傳染給碰到的螞蟻。請你計算,當所有螞蟻都爬離桿子時,有多少只螞蟻患上了...