1. 程式人生 > >4月訓練題解合集

4月訓練題解合集

路徑 .html 環長 sub 答案 有一種 重復 all day5

  由於我太懶了,所以就不每題開一篇寫了。題目大意也懶得寫了。

DAY1

1A

  顯然最優策略是瞎走,在知道那條邊斷掉了之後才走最短路徑。

  先把以 \(T\) 為根的最短路樹求出來,然後可以用堆求出斷掉每條邊後端點到 \(T\) 的最短路徑。

  最後像 dijk 那樣 DP 一下就好了。

1B

  直接線段樹 + 凸包優化 DP 可以輕松做到 \(O(n\log n)\)

  用 這個方法 可以優化到 \(O(n)\)

1C

  不同的環長只有 \(O(\sqrt n)\) 種。

  對每種環長算一下答案即可。

DAY2

2A

  直接縮個點然後每個出度為 \(0\) 的連通塊扔掉最小值即可。

2B

  用 這個東西,用平衡樹維護序列即可。

DAY3

3A

  如果可以修改一個 \(a_i\) 滿足 \(\forall i,a_{i+1}<a_i+b_i or a_{i+1}>a_i+c_i\),那麽那一個人第一天就會發現。

  如果可以修改兩個,那麽那兩個人第二天都會發現。

  現在就是要修改最少的 \(a_i\) 滿足上面那個東西。

  可以 DP。枚舉上一個沒有修改的 \(j\),那麽要求 \([a_i-B_{i-1},a_i-C_{i-1}]\subseteq[a_j-B_{j-1},a_j-C_{j-1}]\)。其中 \(B,C\) 分別是 \(b,c\) 的前綴和。

  可以發現區間長度是單調的。

  然後按 \(a_i-B_{i-1}\) 排序求個 LIS 即可。

3B

  直接重鏈剖分然後在重鏈上二分是 \(O(n\log^2n)\) 的。

  在重鏈上從下往上的求輕子樹的答案。

  當遇到一個輕子樹答案為 \(0\) 時,這條鏈上面的答案就都是 \(0\) 了。

  這樣就只用二分下面那部分了。

  復雜度應該是 \(O(n\log n)\) 的。

3C

  先二分答案 \(s\)

  弄一個網格,把 \(a_i+b_j\leq s\) 的部分染白,剩下的部分染黑。

  那麽就是你一開始在 \((1,1)\),每次找一個同行或同列的異色的點走過去。

  如果 \((1,1)\)

在所有最大匹配上,那麽先手必勝。

  然後把最大匹配換成最大獨立集。

  把 \(a_i,b_j\) 排序後,選的一定是 \(i\leq R,j\leq C\)的白色部分和 \(i>R,j>C\) 的黑色部分。

  可以發現,當 \(R\) 變大的時候,\(C\) 變大的收益是單調的,\(C\) 也是單調的。

  直接掃一遍就好了。

DAY4

4A

  先讓每個點能匹配 \(k\) 條邊跑一邊網絡流。

  然後每次把度數 \(=\) 度數最大值得點找出來,找一個覆蓋這些點的匹配。

  重復 \(k\) 次即可。

4B

  記 \(f_{i,j}\) 為長度為 \(i\),zjt 在 \(j\) 處的期望答案。

  顯然 \(f_{i,1}=f_{i,i}=i\)

  設 \(f_{3,2},f_{4,2},\ldots,f_{m,2}\)\(m-2\) 個未知數,每次可以通過 \(f_{i,j}\) 推出 \(f_{i+1,j+1}\) 的式子。

  最後把 \(f_{m,2},f_{m,3},\ldots,f_{m,m-1}\)\(m-1\) 個式子拿出來消元即可。

4C

  分塊分類討論或者樹套樹都能過。

DAY5

5B

  對於每一個 \(i\leq n\),新建一個點 \(i'\)

  連邊 \((i,i')\)

  對於每一組 \((i,j)\),連邊 \((i',j)\)

  答案為最大匹配 \(-n\)

5C

  用一棵平衡樹維護當前所有最優解以及最優解的答案

  每次遇到一個新的 \(a_i\) 時,先把當前所有最優解的答案加上 \(a_i\) 的貢獻。

  還有一種情況,就是最優解到 \(a_i\) 時值為 \(a_i-1\)

  那就拿之前的最優解平移一下即可。

  這樣就能找到之前所有位置都做了最優操作的解(如果不是最優操作,就不會成為最大值)。

DAY6

6A

  可以發現,最優解的 \(C\) 一定是 \(P-w_i-1\)\(T\)

  把這些值拿出來每個二分答案 DP 一下就是 \(O(n^2(-\log \epsilon))\) 的了。

  這個做法的瓶頸在於二分答案。

  但是我們可以把這些 \(C\) 值 shuffle 一下,每次遇到一個 \(C\)\(O(n)\) 判斷答案是否大於上一個,大了再二分,這樣就只用求 \(O(\log n)\) 次答案了。

  復雜度是 \(O(n^2+n\log n(-\log \epsilon))\)

6B

  可以發現,\(f(a_1,a_2,\ldots,a_n)=2^{n-1}(a_1 or a_2 or\cdots or a_n)\)

  然後 \(n>2\) 的答案和 \(n=2\) 的答案是相同的。

  然後人類智慧手玩一下就好了。

6C

  按顏色的出現次數分塊分類討論就好了。

4月訓練題解合集