1. 程式人生 > 其它 >做題記錄——2.14-2.19

做題記錄——2.14-2.19

做題記錄應該會比較少。

重心並不是外題(。

2022.2.14

停課了。

今天知道了 CTS2022 的成績,非常不開心。

嗚嗚嗚我的 pb 嗚嗚嗚。

晚上在聽民謠。希望明天能開心一點。

CF1285F Classical?

顯然是列舉一波 \(d = gcd(x,y)\),然後把 \(d\) 的倍數扔進一個 vector 裡 solve。

然後就不會了 /kk。

然後你可以從大到小列舉。當你列舉到 \(x\) 的時候,如果存在 \(y>x\)\(gcd(x,y) = 1\),那麼 \(x < z < y\)\(z\) 都沒用了。就把 \(z\) 揚了就行了。

然後你就得到了一個 \(O(n \log^2 n)\)

的做法。

之後其實可以用 \(\mu\) 優化一下複雜度。

CF293B Distinct Paths

這 tm。。

dfs 題,肝敗嚇瘋。

LG6156 簡單題

好像確實是簡單題。

直接暴力整除分塊,然後直接自然數冪和亂搞就行了。

CF722E Research Rover

這題跟我遠古以前出過的一道模擬賽題巨像(賽後才知道那題撞了 thupc 某題)。

\(f_i\) 表示經過第 \(i\) 個點,期望變成原來的多少。

大力 \(O(k^2)\) dp 就行了。

套個概率的殼子。

CF741C Arpa's overnight party and Mehrdad's silent entering

題目這麼鬼長。

暴露出了沒有任何圖論基礎的事實。

暴露出了沒有任何構造基礎的事實。

兩個大毒瘤聚在一起了屬於是。

考慮把情侶之間連邊,再把 \(2i-1\)\(2i\) 一起連邊。

這樣搞出來一定是個二分圖。

直接染色。

2022.2.15

CF986C AND Graph

zsh 你個慫逼。為什麼有想法了不寫。

大力 dfs 就行了。

CF1368E Ski Accidents

好題!!1

考慮一個合法的方案的刪點方案 \(S\)

把剩下的圖分成源點集合 \(A\) 和匯點集合 \(B\)

發現一些性質:

\(A\) 中的點的入邊全部來自 \(S\)

\(A\) 中的點的出邊全部指向 \(B\)

\(S\)

\(B\) 中的點的入邊全部來自 \(A\)\(S\)

\(B\) 中的點的出邊全都指向 \(S\)

拓撲序動態維護即可。

CF547D Mike and Fish

日常降智。

考慮把行,列看成點。

你會搞出一個無向圖。

這時其實可以直接跑有源匯上下界可行流。

更方便的做法是建出邊之後維護一個歐拉回路。

CF487E Tourists

口胡:

縮點之後是一棵樹。

顯然在邊雙裡可以隨便亂走。

那做完了。

哈哈,好像跟題解差不多。

CF280D k-Maximum Subsequence Sum

這題跟標籤的 graphs 和 flows 有什麼關係嗎。

直接上線段樹,對於每個劃分,記是否左右相鄰。

隨便轉移。

寫完一個函式記得 return!

看了你谷的題解區,我他媽直接問號。

ATS 和 ATM 你們兩個是石樂志吧。

2022.2.16

哈↑哈↓。

CF923E Perpetual Subtraction

模擬賽題。

大力把生成函式寫出來就行了。

CF1019C Sergey's problem

有一種構造的方法。

刪除一個點 \(u\),以及刪除從這個點出發的邊連線的點。然後對新圖求出符合條件的方案。

如果新圖中存在一個點到 \(u\) 的距離是 1,那就假裝無事發生。

如果不存在,就把 \(u\) 加進答案集合裡。

至於如何實現,不是重點(。

CF1404E Bricks

考慮最暴力的方式,對每個點 \(1 \times 1\) 覆蓋。

那麼如果打破了 \(x\) 個次元壁,答案就會減少 \(x\)

考慮計算最多的能打破的次元壁。

發現同一個方塊內,左右/上下 的次元壁不能被同時打破。

就 link 一下跑個最小割就行了。

CF464E The Classic Problem

什麼毒瘤多合一題。

顯然是把數按二進位制存。

然後你考慮 dijkstra 需要的操作。

你發現需要加法和比較大小。

於是你用一棵主席樹維護。

對於加法,就相當於區間置 0,單點賦值。

對於比較大小,就線上段樹上二分雜湊值。

你大力就行了。

CF325E The Red Button

老早之間就看到過這題了。

我也不知道為啥過了。

CF521E Cycling City

好像可做?

邊雙縮點之後,只要不是一個簡單環就一定有解?

看起來挺對的。

哦,好像可以更暴力一點。

2022.2.17

CF429E Points and Segments

想到了歐拉回路,挺成功的。

沒想到正解,挺失敗的。

你弱化一下,變成對於每個端點,\(|val| \leq 1\)

你發現對於每個端點,如果有偶數條邊,那麼它的 \(val\) 一定等於 0。

然後上面這玩意大力歐拉回路就行了。

對於端點不是偶數條邊的情況,你就手動給它加一條邊,不影響正確性。

CF1491G Switch and Flip

首先考慮經典的交換方式。

你發現對於一個全向上的環,按照這樣交換 \(n-1\) 次,會搞出來兩個位置相同但是方向向下的點。

如果這個環裡存在兩個本身向下的點,按照這樣操作就能搞出答案。

那你可以用一次操作把兩個環合併,就可以執行上述步驟。

如果最後還剩下一個環,有奇技淫巧可以在 \(n+1\) 次內解決。

CF938G Shortest Path Queries

阿西巴西巴西巴。

wdnmd 沒有想到線性基。寄!

有了線性基,這題就比較簡單了。

至於加邊和刪邊?線段樹分治就行了。

CF1383D Rearrange

zsh 為什麼就是不會 greedy 呢 /fn/fn。

倒序插進去,有個比較牛逼的做法。

如果這個數在行集合和列集合裡出現了,新開一行或一列。

否則扔到前面的行列裡。

這樣做是對的。

首先它保證了 S 是相同的。

其次其他數並不會影響行集合跟列集合。

CF360E Levko and Game

先爭勝,後保平。

把邊都搞成 \(r\)

然後對於一條邊 \(u \rightarrow v\),如果 \(dis_{s1,u} < dis_{s2,u}\) ,就把它搞成 \(l\)

這樣跑一遍看能不能贏。

一直重複這個過程。

2022.2.18

CF1545C AquaMoon and Permutations

雖然被這題搞得非常自閉,但不得不說這題質量很高。

你考慮如果有某一列某一個數只出現一次,那麼一定會選這一行。你就把這一行刪掉就行了。

如果不存在某一列某一個數只出現一次,根據抽屜原理,每一個數一定恰好在每一列出現兩次。

可以證明,在這種情況下,原 \([1,n]\) 行和 \([n+1,2n]\) 行都能組成 Latin Square。因為如果不是的話,就一定存在某個數在一列出現三次或以上。

那麼你可以發現,這時如果你把相互矛盾的行連邊,它會構成一個二分圖。

注意到此時的性質是,每一條邊的兩個端點有且僅有一個被選中。

你刪除二分圖的隨意一個連通塊,然後把答案乘 2 就行了。

重複上面的步驟。

2022.2.19

你媽逼的我忍不了了,我去做集訓隊作業去了。

CF913F Strongly Connected Tournament

好像挺牛逼的。

我感覺我的問題就是寫不出來式子(你這個叫問題嗎 /fn )。

CF600F Edge coloring of bipartite graph

毛估估一下答案是最大度數。

至於方案,對於 \((u,v)\) 搞出 \(mex(u),mex(v)\)

然後強制這條邊染上 \(mex(u)\)

如果有衝突,就跑一個類似匈牙利的強制替換就行了。

CF504E Misha and LCP on Tree

一眼二分雜湊。

CF505E Mr.Kitayuta vs. Bamboos

首先想到二分答案,然後想到了要砍的次數,之後想到了在後面砍比在前面砍優,所以能在前面砍就在前面砍。

那麼這個限制只需轉化為:必須在時間 \(i\) 之後砍的次數不超過 \((m-i)k\)

對於每一棵樹,就可以獨立考慮。注意到最終的砍樹方案會由一些 \(p\) ,以及一次 \(d \leq p\) 組成。

那麼結合上面這個限制,就比較容易考慮了。