The 3rd Universal Cup. Stage 8: Cangqian

  • 連結:https://qoj.ac/contest/1780
  • 時間:2025 Apr 2, 07:00-12:00
  • 團隊:SorahISA
  • 成績:5 / 13, Penalty 596, dirt 44% ( A B C D E F G H I J K L M )

在 A 大坐牢,寫了 python 不知道為什麼會 RE 卡了一個小時。

Problem A. Bingo

待補

Problem B. Simulated Universe

待補

Problem C. Challenge NPC

Tags: constructive

構造一張簡單無向圖 使得存在一個正整數 滿足最小點著色數 且 greedy 解至少要用 個顏色。

  • Greedy 解:對 ,將點 的顏色(此處的 -based)。

這麼大,感覺就可以弄一張二分圖做到 ,所以就做完了。

只要把第 小的奇數/偶數連向第 小的偶數/奇數就可以了。

  • 因為是二分圖,所以最佳解顯然是
  • 小的奇數/偶數會被 greedy 解填上顏色

Problem D. Puzzle: Easy as Scrabble

待補

Problem E. Team Arrangement

Tags: greedy, bit operation

要把 個人分成若干組,第 個人希望自己在的小組有 個人。如果一種分組方法每一組分別有 個人,那麼總價值就是

請求出最大價值的分組,或判斷其不可能達成。

第一直覺是先枚舉每一組的大小,再判斷該分組能不能被達成。 個人的分組數量是 ,而 ,於是大概要一個 的方法來判斷。

最簡單的方法是 greedy:先將區間們依照右界小到大排序,再每次取 的 lower bound 出來。用 multiset 果不其然的吃了 TLE,改成 map 之後有稍微改善,但複雜度仍然有一個

注意到這題 ,每一組的大小也只有 以下,可以用一個 uint64_t 來儲存!

  • 跟用 map 的做法一樣,存在 (val >> x) & 1
  • 的 lower bound 可以用 __builtin_ctzll(val >> l << l) 來做,這樣就可以在 的時間內找到。
    • 注意 __builtin_ctzll(0) 會是 undefined behavior,可以特判,或是一開始就放 1 << (n+1)val 裡面。

於是這樣的複雜度就變成 了。

Problem F. Stage: Agausscrab

水題,跳過

Problem G. Crawling on a Tree

待補

Problem H. Permutation

待補

Problem I. Piggy Sort

待補

Problem J. Even or Odd Spanning Tree

Tags: mst, lca

給一張帶正邊權的 邊無向圖 ,求 weight 分別是奇數跟偶數的最小生成樹,輸出 weight 即可(不存在則輸出 )。

  • 多筆測資、

顯然有一邊的答案就是 MST 本身。

  • 是選了 條奇邊的最小生成樹 weight,如果最小生成樹選了 條奇邊,那答案一定是
Proof

根據經典 Aliens 題「黑白生成樹」可以證明 有凸性。

  • 要得到 只要枚舉樹外邊 路徑上奇偶性相異的最大值換就好。
非常不嚴謹的 Proof

隨意抓一棵最小生成樹 ,其權重是

考慮原本 路徑上的一條邊 被拔掉,替換成 ,從而使 這條邊成為 路徑的新最大值。把 邊加進來之後的 會變成一棵基環樹,環上包含 三條邊跟其他一些邊。

這樣做會使答案變好的條件是 ,但這種情況下 會是權重更小的 MST,與原假設不符。

應該可以推廣到替換任意條邊的情況,但我推不出來。

順帶一提,官解用「這是擬陣的性質」一筆帶過,但我不熟擬陣不會證。有機會再補證明。

於是只要用 LCA 維護路徑上的奇數 weight、偶數 weight 最大值是多少就可以了。

時間複雜度:

Problem K. Sugar Sweet 3

待補

Problem L. Challenge Matrix Multiplicatio

待補

Problem M. Triangles

待補