2020北大集訓題解


能聽懂的就盡力寫吧。代碼肯定是都咕了。

Day 1

T1

再次感謝出題人不殺之恩,給了我 89 分這個鬼畜分數。

做法(不是寫法)和正解完全一樣,然而還是不知道自己怎么錯了。

心情好了再去看 https://uoj.ac/problem/427 。這題不僅被甩了 11 分還花了 3h ……

T2

真就聯賽模擬題啊 /jk

獲得成就:上台講題。

先考慮一個區間怎么做。對於每個位置直接處理出 \(pre_i\) 表示往前第一個不被包含在它的子樹內的位置,可以線段樹二分求出。然后就是一個二維數點。

多個區間的話,相當於給這個區間加了一個額外限制,即必須是某個點 \(L\) 的祖先。同樣先線段樹二分,得到第一個滿足該條件的點(然而寫這句話的時候發現這好像不太好做,所以要線段樹二分出這個區間的一個前綴,使得前綴的 \(lca\) (好像 \(lca\) 也不好搞,只能是關於 dfs 序的某些東西)是 \(L\) 的祖先。所以我場上寫的線段樹二分可能復雜度還是錯的???)。此時,前綴的所有點都一定不滿足條件,而對於后面的點,如果子樹中能包含這個前綴,自然也就能包含 \(L\)

線段樹上只維護 \(dfn,low\) 。復雜度 \(O((m+Q)\log m)\)

T3

挺有趣的一道題,可惜場上沒時間想。

稱 x-度點 表示有 \(x\) 個兒子的點。

subtask 1

在這檔部分分中,樹中不存在一度點。

容易發現詢問 \(V\backslash\{x\}\) 可以得到這個點是否是葉子,那么先用 \(n\) 次操作得到此時的葉子集合。然后考慮怎么確定葉子的父親,發現當 \(x\) 是葉子時可以詢問 \(V\backslash \{x,y\}\) 來確定 \(y\) 是否是 \(x\) 的父親。如果 \(fa_x=y\) 那么會返回 \(n-2\) ,否則是 \(n-1\)

然后發現這個枚舉 \(y\) 的過程其實可以直接二分一個前綴,就可以在 \(O(\log n)\) 的時間內得到一個葉子的父親。發現兩個葉子的父親相同之后就可以刪掉這兩個葉子,並把它們的父親加入葉子集合。

這樣就獲得了一個 \(O(n\log n)\) 次詢問得到樹形態的做法。

subtask 2

此時樹中可能存在一度點,但詢問次數更多(當然數量級沒有變)。

考慮上面的做法,會發現在第一步就直接錯了:詢問 \(V\backslash \{x\}\) 並不能區分零度點和一度點。我們先把二度點區分出來,然后考慮零度點和一度點的集合 \(S\) 。那么詢問 \(S\backslash \{x\}\) 會有兩種取值:

  • \(n-2\) :這個點是零度點,且它的父親是一度點。
  • \(n-1\) :這個點是一度點,或者它是零度點且它的父親是一度點。

容易發現如果出現 \(n-1\) 的第二種情況,那么一定無法確定樹的形態。所以先不考慮這一種情況,求出三種點的數量 \(c_0,c_1,c_2\) 。由於真正的 \(c_0\) 應當等於 \(c_2-1\) ,所以如果不滿足這個條件就直接返回無法確定。

然后用 subtask 1 的做法先得到只考慮零度點和二度點的樹形態,然后嘗試把一度點塞進去。

然后又是一個性質:在二叉樹中,詢問一個點集,可以根據大小來判斷是否至少有一組 祖先-后代 關系。那么選擇一個葉子集合 \(L_0\) 和一個一度點 \(x\) ,詢問 \(L_0\cup \{x\}\) 即可確定 \(x\) 的子樹中是否存在 \(L_0\) 中的葉子。如果總葉子集合是 \(L\) ,那么詢問 \((L\backslash L_0)\cup\{x\}\) 就可以知道 \(x\) 子樹的葉子集合是否被 \(L\) 完全包含。

現在樹的基本形態已經確定了,所以可以邊分治,確定所有一度點是在這個子樹內,在外面,還是恰好在這條邊上。

出題人用神奇分析方法得到了詢問次數上界是 10408 ,不太懂怎么做到的。

Day 2

T1

簽到題。

明天 危 ……

T2

算法一

神奇維護分段函數,這竟然還能維護出來 /jk

算法二

顯然應該旋轉 45° ,使得橫縱坐標互相獨立。

然后再稍微搞搞就得到了: \(2n\) 個隨機變量,每個變量取值 \([-{1\over 2},{1\over 2}]\) ,求 \(|\sum x_i|\) 的期望。

然后掉線了。

算法三

wdnmd 為什么這還和算法二有關……

也掉線了。

算法四

場上做法。我也不知道為什么它是對的,但它就是對的。

\(n:= 2n\)

\(s_0=0,s_i=\sum_{k\le i} x_k\) ,那么答案是 \(|s_n|\) ,有限制 \(s_i\in [s_{i-1}-{1\over 2},s_{i-1}+{1\over 2}]\)

先把 \(|s_n|\) 變成 \(\max(s_n,0)\) ,然后類似 \(m=\sum_{i=0}^{\infty} [i<m]\) ,再變成 \(\int_0^{\infty} [s_{n+1}<s_n]\text{d}s_{n+1}\) (大概不能這么寫,但我不知道怎么寫)。

限制有點麻煩,但是可以容斥變成 \((-\infty,s_{i-1}+{1\over 2}]-(-\infty,s_{i-1}-{1\over 2}]\) (用離散的方案數的角度很好感性理解,但是它是連續的,所以我也不知道為什么是對的)。那么就變成一堆 \(s_i\le s_{i-1}+k\) 的限制,以及一個 \(s_{n+1}\ge 0\)

這個形式就非常好看,對於 \(s_i\le s_{i-1}+k\) 可以給所有 \(j\ge i\) ,做 \(s_j:=s_j-k\) ,那么做完之后就只剩下 \(s_i\le s_{i-1}\)\(s_{n+1}\ge c\) 了,其中 \(c\) 是前面所有 \(k\) 加(減?)在一起。

容斥顯然可以變成 \(O(n)\) 枚舉,就得到了答案式子:

\[{2^{-n-1}\over (n+1)!}\sum_{i=0}^{n} [2i-n\ge 0] (2i-n)^{n+1}{n\choose i}(-1)^{n-i} \]

(可能有一些正負寫錯了,記不清楚了)

(這里的 \(n\) 仍然是輸入的 \(n\) 的兩倍)

然后由於未知原因要特判 \(n=2\) ,就做完了。

T3

算法一

kosaraju 是個啥?

算法二

每個強連通分量分別做,找到一條哈密頓回路,那么翻轉不在回路上的邊答案不變。

然后神奇方法沖。

算法三

wdnmd 我怎么又掉線了……

然后標算被踩了 /cy

有一個經典結論:只看出度序列就可以直接得到強連通情況。

然后翻轉一條邊只會修改兩個位置,就做完了。

標算和哈密頓回路有關,大概是(?)先找一個哈密頓回路出來,那么其他邊修改都是無效的,而翻轉回路上的邊會把回路變成鏈,其他邊會覆蓋一個區間,然后亂搞搞。

Day 3

T1

直接行列式,做完了。

被打爆了 /kk

T2

合法當且僅當每個位置開頭的逆序對個數都是偶數。

然后 \(O(n^2)\) 有手就行。

剩下的事交給 lxl 。

想到分塊,每個塊建線段樹,然后無腦暴力,即可做到 \(O(n\sqrt {n\log n})\)

然而線段樹的常數炸了。

我們其實只關心一個塊內有沒有 1 ,所以可以把線段樹變成差分。雖然還是要二分查 rank ,但是常數明顯降低,就過了。

好像還有 \(O(n\sqrt n)\) 做法但是讓卡常的人都見 lxl 去吧

T3

wdnmd 還真是 lxl ……

穿着 DS 外衣的模擬題?不想思考了。

Day 4

T1

\(O(n^22^n)\) 求出每個點集組成一條鏈的方案數,然后 \(O(n^22^n)\) 做子集卷積意義下的 exp 即可。

詢問都是假的。

然后發現有不用 exp 的做法,被教育了。

還有直接沖 \(O(3^n)\) 也有一定概率通過。

T2

先建一個虛點,所有點向它連邊,然后就等價於求一個內向生成森林個數。

不會矩陣樹定理的已經被區分掉了。

然后發現矩陣是一個循環矩陣,求行列式有快速解法。然而我不會。

T3

subtask 1,2

直接完全 \(k\) 分圖即可。

subtask 3,4,5

條件是不存在正方形,即任意兩個點的鄰居的交的大小不超過 1 。

對於一個點 \(x\) ,任取兩個鄰居 \(a,b\) ,令 \(cnt_{a,b}\gets^+ 1\) 。那么最終任意一個點對的 \(cnt\) 都不能超過 1 。由於只有 \({n\choose 2}\) 個點對,而一個點 \(x\) 貢獻的 \(cnt\) 就有 \({deg\choose 2}\) 個,所以大概能估出 \(M\) 的上界是 \(O(N\sqrt N)\) 級別。

然后直接造一個 \(P\times P\) 的矩陣, \((u,v),(x,y)\) 有邊當且僅當 \((ux+vy)=1\pmod P\) 。相當於是每個點連了一條直線,那么兩條直線要么無交,要么交為 1 。

subtask 6

\((u,v,w),(x,y,z)\) 有邊,當且僅當 \((u-x)^2+(v-y)^2+(w-z)^2=1\pmod P\)

wtf?

感性理解一下,就是向旁邊一個單位球連邊,然后操作一下就發現三個球的交不會超過兩個點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM