2019 8 5測試題解(NOIP2019模擬)

2021-09-25 21:48:05 字數 2688 閱讀 1590

有一顆n

nn個點的樹,每個點有乙個權值a

aa,設其兒子個數為s

ss,要滿足每個點的a+s

≤m

a+s \le m

a+s≤

m,求最多能刪多少個點(乙個點刪掉後,它的a加到父親上,所有兒子連到父親上)。

1 ≤n

≤2000000,1

≤m

≤100000,0

≤ai≤

1000

1 \le n \le 2000000, 1 \le m \le 100000, 0 \le a_i \le 1000

1≤n≤20

0000

0,1≤

m≤10

0000

,0≤a

i​≤1

000

考場:一開始想的是dp,發現要無論如何要多記一維狀態,也難以優化,更不可能線性。

然後對於這種資料範圍猜大概是貪心,很直接地想到從葉子節點往上,在滿足限制下盡可能多地刪節點,即按u

uu的兒子的a

aa從小到大刪,直到a[u

]a[u]

a[u]

>m

mm就不能再加。也很容易證明這樣是最優的:若刪得更少,則它的好處是使a[u

]a[u]

a[u]

減小,而這樣最多的貢獻就是多乙個u

uu可以被刪,且還會使u

uu的父親a

aa變大,那還不如直接盡肯能地刪,顯然在個數一定時不挑最小的刪不會更優。

遞迴計算時注意全域性變數的清空。

有一顆n

nn個點的樹,每條邊有長度,可以點燃其中一些葉子節點,點燃後的節點會以乙個單位的速度向周圍燃燒,到一條邊的端點時點燃這個端點,這樣會有乙個最後所有邊的燒完的時間,求不同的時間的個數。

由於答案可能很多,請你輸出方案數對 998244353

998244353

998244

353(=7×

17×

223+

1=7×17×223+1

=7×17×

223+

1,乙個質數)取模的結果。並輸出前 1000

1000

1000

小的可被統計的時間。

2 ≤n

≤500,1

≤w

≤10000

2 \le n \le 500,1 \le w \le 10000

2≤n≤50

0,1≤

w≤10

000

正解:原題非常不良心地要求取模,實際上隨便想想都發現在時間在總邊權範圍內,且精度最多0.5

0.50.

5,再仔細考慮一下,發現最後燒掉的那條邊要麼從這條邊兩側的兩個端點燒過來,要麼直接從乙個端點燒過來,所以這樣時間最多只有n2n^

n2個。又注意到資料範圍,於是考慮列舉出發的兩個點/乙個點,判斷最後會燒在哪條邊(乙個點就列舉最後燒在哪個點),這樣就列舉出了所有可能,於是只需判斷每種情況是否可能。

考慮一種情況要可能,就是其它葉子節點都在該時間內被燒到,且其它點燃的葉子節點都不會使這個時間變短。一開始的想法是先點燃列舉的點,對於每乙個葉子節點直接判斷是否能否在該時間內被點燃,不能的話這個點就要點燃,但這樣點燃的點會互相影響。不如對於點燃後不會影響最大值(即不會使列舉的最後燒完的邊燒完的時間變短)的葉子節點都先點燃,最後判斷點燃後燒完的時間是否與原時間一樣(如果更大即不合法)。對於已知一些點點燃,求燒完的時間,dfs

dfsdf

s兩邊做個dp即可o(n

)o(n)

o(n)

求出。有一顆n個點的樹,每條邊有乙個數wiwi

wi,有m

mm個詢問,每個詢問給出x,y

x,yx,

y,判斷x到y的路徑上的數字重新排列是否能組成回文序列。

n ≤1

06,m

≤107

,wi≤

nn \le 10^6,m \le 10^7,wi \le n

n≤106,

m≤10

7,wi

≤n考場:

顯然對於路徑長度為偶數要每種數字都出先偶數次,奇數就有且僅有乙個出現奇數次,又注意到x,y

x,yx,

y的lc

alca

lca到根的路徑會被算兩次,對於奇偶性無影響,於是只需判斷x,y

x,yx,

y到根的路徑上每種數字出現的次數的奇偶性是否完全相同或者有且僅差乙個,用hash判一下即可。當時也不知道怎麼想的,可能t2還沒打暴力比較虛(看錯題的嚴重後果),就寫了個map判兩個hash值是否只差一位,然後就tle到只剩50pts。

正解:要去掉map這個很大的log,顯然用hash表,像鍊錶那樣存即可,均攤是o(1)的(反正比map好得多)。

可能我比較菜還被卡常了,注意兩個地方:

1.hash值用異或,不要用加減,可以少判一次反過來的(改完就過了)

2.雜湊表取質數會比較快(推薦1e6+7)

其實題目都不難,1、3都應該比較輕鬆ac,但t3以為map有80,然後很少寫過雜湊表,再加上t2還沒動就把比較虛,於是就gg了。以後要注意到map是很慢的(m=1e5都能tle,甚至unordered_map也救不了),然後雜湊表其實幾行就沒了。t2其實也能想,只是比較複雜,**略長,場切可能有難度,但至少應打出暴力。可能昨天沒睡好狀態不好吧,連1、3都花了不少時間,也體現了**力還不太行,以及以後千萬要認真審題!!!

19 2 18 測試題解

題太水了懶得乙個乙個發 t1 題意就是5000000個點,10000000條邊,邊權只有1或2,求最短路 我的做法 先bb一句,要開始考試的時候l讓我和gigo,gsy去樓下考,我說看一下題再決定,然後他說 你看,第一題是裸的最短路。又因為我懶得搬東西去樓下並且不想承受爆零 墊底的壓力,於是就留在樓...

7 21模擬測試題解

用nlogn求出最長不下降子串行長度然後判長度是否有n 1就行了 因為每個數只能用一次,所以前i個數所能組成的最大和為a 1 a 2 a i 若a i 1 a 1 a 2 a i 1 則因為比a 1 a 2 a i 大的下乙個數必 a i 1 所以a 1 a 2 a i 1為答案。include i...

2018 10 25 模擬測試題解

目錄問題 b 蜀傳之單刀赴會 問題 c 吳傳之火燒連營 本篇題解也發表於zwcblog作者是同乙個人 眾所周知,劉備在長阪坡上與他的一眾將領各種開掛,硬生生從曹操手中逃了出去,隨後與孫權一 燒赤壁 占有荊益 成就霸業。而曹操則在赤壁一敗後再起不能,終生無力南下。建安二十五年 220年 曹操已到風燭殘...