2018 年 5 月

今天是 5 月 3 日,從今天開始天天打個卡,大概是晚上 8 點到 10 點之間更新,記錄一天所學。算法

5 月 3 日

一、min-max 容斥

容斥應用在 min max 之間,有chrome

$$\max S = \sum_{T \subset S} (-1) ^ {|T| - 1} \min T$$數組

$$\min S = \sum_{T \subset S} (-1) ^ {|T| - 1} \max T$$數據結構

至於證實,我考慮第 $k$ 大做爲最小時被算的次數,爲閉包

$$\sum_{i = 1} ^ {k} \binom{k - 1}{i - 1} (-1) ^ {i - 1} = [k = 1]$$app

【BZOJ 4036】每次生成數 $[0, 2 ^ n)(n \le 20)$ ,生成 $i$ 的機率爲 $p_i$ ,問指望多少次後或和爲 $2 ^ n - 1$ 。less

取得全部,能夠看出取得的時間的 max 。某個集合的 min 能夠看作選到集合中某個的指望次數,能夠轉化爲1除取得集合中某個的機率。ide

$$E(\max S) = \sum_{T \subset S} (-1) ^ {|T| - 1} \frac{1}{\sum_{i \cup T \ne \emptyset} p_i}$$函數

因此大概先處理好 $f_T = \sum_{i \cup T \ne \emptyset} p_i$ ,而後帶上容斥係數直接求和。$f_T$ 能夠考慮先用減法原理,考慮交集爲空,而後對 $T$ 取補集,考慮子集和便可。優化

【經典問題】$n$ 種郵票,每次等機率隨機,指望多少次能取得全部的 $n$ 種。這道題經過算兩次,能夠導出一個有趣的恆等式:

$$\sum_{i = 1} ^ n \frac{1}{i} = \sum_{i = 1} ^ n (-1) ^ {i - 1} \binom{n}{i} \frac{1}{i}$$

我尚未想到其餘很好的組合證實,yay 給了差分相等,f(0) 相等的代數證實。大概有一些什麼推廣之類的。

【HDU】Endless Spinning:長度爲 $n$ 的序列,每次將一個區間染成黑色,指望多少次所有黑?對於要求子集 $S$ 中的某一個位置變黑的指望操做次數,考慮子集變黑的機率,考慮子集不變黑的機率,爲 $\sum \binom{b_i}{2}$ ,因此式子爲

$$\sum_{S \subset [n]} (-1) ^ {|S| - 1} \frac{1}{1 - \frac{\sum \binom{b_i}{2}}{\binom{n}{2}}}$$

用一個 DP 來進行描述,我設計的狀態爲當前最後將第 i 個位置染黑,$\sum \binom{b_i}{2} = j$ 時的全部狀況的 $(-1) ^ {|S| - 1}$ 的和。 

我稍微思考了一下,以爲 min max 容斥大概能夠推廣到形如 kthmax 這樣的形式。

$$\text{kthmax}(S) = \sum_{T \subset S} f(|T|) \min(T)$$

考慮第 $x+1$ 大的元素被計算的次數,有

$$\sum_{i = 0} ^ x \binom{x}{i} f(i+1) = [x = k - 1]$$

二項式反演得

$$f(x+1) = (-1) ^ {x - k + 1} \binom{x}{k - 1}$$

$$f(x) = (-1) ^ {x - k} \binom{x - 1}{k - 1}$$

因此

$$\text{kthmax}(S) = \sum_{T \subset S} (-1) ^ {|T| - k} \binom{|T| - 1}{k - 1} \min (T)$$

根據這個原理,我能夠設計下面這道題目。

【原創題】$n, m \le 1000, n - 10 \le K \le n$ ,有 $n$ 張郵票,拿到第 $i$ 張的機率爲 $\frac{p_i}{m}$ ,問指望多少次,才能拿到 $K$ 張郵票,答案對 $998244353$ 取模。

套用 kthmax ,再利用指望的線性性質展開,以後就至關於問一個子集被選擇的指望次數,變爲機率分之一,式子很容易寫出來,而後能夠設計一個 $O(n m K)$ 的 DP ,爲了轉移,方程的其中一維與組合數的下指標有關。

二、某個區間的線性基

區間 $[l, r]$ 的線性基能夠 $O(bit)$ 快速處理。若 $l+2 \le r$ ,那麼必定能夠找到 $l \le x \le x+1 \le r$ ,且 $x$ 爲偶數,因此最低位就職意了,只須要對高位進行遞歸。若 $l+1 = r$ ,那麼直接把兩個數字插進去。若 $l = r$ ,就把這一個數字插進去。

給定兩個序列 $l[], r[]$ ,$l_i \le r_i$ ,如今問區間的區間的線性基。。。想來想去發現仍然只能套個線段樹,作到三個 log 的複雜度,沒想到怎麼繼續優化,但能夠有一些常數優化。

三、「2017 Multi-University Training Contest 1」

給定一棵 $100000$ 個點的樹,對全部路徑上的不一樣色數求和。

考慮每種顏色的貢獻,算通過這種顏色的路徑數量,轉化爲算不通過這種顏色的路徑數量。考慮枚舉每一個點,而後枚舉它的後繼,後繼不斷的進行搜索,不通過與最初枚舉的點顏色相同的點,總共掃描到 $x$ 個點,貢獻 $\binom{x}{2}$ ,再特殊考慮這種顏色的全部點的 LCA 外的點。能夠把全部的顏色一次作,直接對這棵樹進行一個 DFS ,sum[x] 表示 DFS 到當前位置時,去除掉顏色爲 x 的全部 DFS 完的子樹以後,總共去除掉了多少個點,只須要用這些數據來統計答案,並維護這些數據。我的以爲這道題仍是蠻巧妙的。

5 月 4 日

發燒。

5 月 5 日

發燒。

5 月 6 日

半天用來發燒,半天用來學點東西。

一、2-SAT 相關

2-SAT 的建圖要充分必要,能夠利用傳遞性。

2-SAT 判斷是否有解,要根據兩個點是否在同一個強連通份量。2-SAT 構造解,直接取兩個強連通份量中較小的,能夠根據 DFS 序的一些性質以及對稱性進行證實。

「BZOJ 3495」Riddle :給定一張 100000 個點,200000 條邊的圖,點被劃分爲若干個點集,要求每一個點集中選擇一個點,任意一條邊至少有一個端點被選擇,問是否有解。考慮 2-SAT ,每一個點包括了選或不選這兩種可能。對於每一個點集中選擇一個點這個限制,考慮將 i1 連向全部的 j2 ,構建 2n 個前綴、後綴輔助點,把邊數優化到線性。

通常而言,就是這樣一個模型:某個集合中選擇有且僅有一個點,因而能夠用上面的模型進行優化。有時候還能夠用線段樹,Trie 什麼的來優化建圖,總之都是些很顯然的東西吧。

2-SAT 有一類在樹上的套路,「Mythlogical - 改」:給定一棵 1000 個點的樹,有 1000 個禮物,每一個禮物在某個點,且知足若干個禮物 x 和禮物 y 的路徑通過點 c 的限制,或者禮物 x 和禮物 y 的 LCA 爲點 c ,請構造一組方案。

設 Vi, j 表示禮物 i 是否在 j 子樹中。先知足樹上的限制,若在當前子樹內,那麼就在父親的子樹內,也不在兄弟的子樹內,這樣的條件是充分必要的,對於不在兄弟子樹內的連邊,考慮利用先前的技巧。而後禮物 x 和禮物 y 的路徑通過點 c ,至關於禮物 x 和禮物 y 在點 c 的不一樣子樹,因此若 x 到點 c 的後繼 v 子樹內,點 y 就不在,若點 x 不在以 c 爲根的子樹內,點 y 就在。禮物 x 和禮物 y 的 LCA 爲點 c ,則要求點 x 和點 y 都在以 c 爲根的子樹內,若 x 到點 c 的後繼 v 子樹內,點 y 就不在。

二、偏序建圖

「GDOI 2018 Day 3 Prob 1」給定三維,若 i 有兩維大於 j ,那麼能夠利用 i 消除 j ,問有多少個點可能被保留到最後。

若 i 能夠消除 j ,那麼 i, j 連邊,問題變爲有哪些點能夠做爲某個樹形子圖的根節點。兩兩可比,會連成一個競賽圖,競賽圖縮點後是一條鏈,有且僅有第一個強連通份量內的點能夠做爲樹形子圖的根。枚舉兩維,用可持久化線段樹來優化一下連邊,跑跑 Tarjan ,取最後一個有 1 到 n 間的點的強連通份量。

總之二維偏序的建圖能夠用可持久化線段樹進行輔助,每次連向前綴對應的若干個線段樹節點,而後把當前節點的信息也加到可持久化線段樹裏面去。推廣到三維偏序,考慮對其中的一維進行 CDQ 分治,剩下的兩維照作就是了。

競賽圖相關的另一個問題就是競賽圖存在哈密頓路徑,強聯通的競賽圖存在哈密頓迴路,我能夠結合出這樣一個問題:三維,若 i 有兩維大於 j ,則能夠利用 i 消除 j ,請構造一個最長的消除序列。我知道最長的消除序列的長度必定是 n ,構造也能夠暴力構造,時間複雜度爲 O(n ^ 2) ,我還想不到能不能利用偏序的一些性質把複雜度優化。

三、「AGC 003d」Anticube

給定 100000 個 10 ^ 10 之內的數,選擇儘量多的數,使得兩兩乘積不爲 cube 。

分析乘積不爲 cube ,容易想到素數分解,每一個素數的指數能夠先化簡到 0 到 2 之間。當 p 必定的時候,pq 爲 cube 的 q 惟一肯定,換句話說,爲 cube 的數一一對應,因此作法大體就是對於每對數,取出現次數的 max 相加便可。化簡時,考慮被化簡的素數知足 p ^ 3 < 10 ^ 10 ,因此只用枚舉 p < 10 ^ {10 / 3} 。求補數時,對於 p ^ 3 < 10 ^ 10 ,進行暴力取補,分解剩下的只多是 p ^ 2 ,p, 或 pq ,判斷是否是徹底平方數就能夠處理補數了。

另外,這道題的補數的數值可能會爆 long long ,正確的作法是不用處理它,由於咱們不在乎值是多少,只在乎值相不相同。

很容易能夠把問題推廣到兩兩乘積不爲四次方數,化簡的時候枚舉到 10 ^ {10 / 4} ,求補數的時候要枚舉到 10 ^ {10 / 3} ,因此說原題中兩個都枚舉到 10 ^ {10 / 3} 相同只是巧合。。

5 月 7 日

一、判斷一個點是否在多邊形內

「PE 201」:給定 1000 個三角形,判斷原點在不在三角形內部。判斷的方法是看是否都在同一側,即 Ai × Ai+1 >= 0 是否都成立,或 Ai × Ai+1 <= 0 是否都成立。

原創題:給定若干種比重爲 xi + yi + zi = 100% 的原料,每種原料若干,問是否能合成比重爲 X + Y + Z 的生產品。保留兩維,能合成的部分在凸包的內部,把上凸殼的全部點和下凸殼的全部點找出來,對於每次詢問,分別在上凸殼和下凸殼上二分,求出凸殼上 x = X 對應的 Y ,而後判斷是否在區間內。

通常地,若是要判斷一個點是否在凹多邊形內,那麼就從這個點引出一條射線,若與多邊形有偶數個交點,就在內部,若與多邊形有奇數個交點,就在外部。

二、「2017 Multi-University Training Contest 1」

有 10 個位置,最初每一個位置上的數值都是 $n = \sum_{i = 1} ^ {10000} p_i ^ {e_i}$ ,知足 $\sigma e \le 300000$ ,每次依此對每一個位置操做,把這個位置的數變爲某個真因數,某個位置變爲 1 的時候結束,問以每一個位置結束的方案數對 $998244353$ 取模。

分析以下:

不難想到一個輔助問題:設 $f(i)$ 表示 $n$ 剛好在 $i$ 回合變成 $1$ 的方案數。

先考慮原問題與輔助問題的關係,當前考慮第 x 個位置做爲終止位置的方案數,枚舉在 i 個回合的時候結束,那麼前 x+1 個位置能夠看做在第 i+1 個回合結束,後面的位置能夠看做在第 i 個回合結束,因此第 x 個位置的答案就是 $\sum_i f ^ {x - 1}(i+1) f ^ {n - x + 1} (i)$ 。

如今考慮如何求解 $f(x)$ ,注意到每一個因子之間都是獨立的,$k$ 次機會要把每一個指數都變爲 $0$ ,能夠看做一個插板,再來個廣義的容斥,就能夠獲得

$$f(x) = \sum_{k = 1} ^ x (-1) ^ {x - k} \binom{x}{k} \prod_{i = 1} ^ m \binom{e_i + k - 1}{k - 1}$$

$f(x)$ 能夠直接卷積求出。

注意到 $e_i$ 的和爲 $300000$ ,因此取值個數爲 $O(\sqrt n)$ ,因此直接暴力求 $\prod_{i = 1} ^ m \binom{e_i + k - 1}{k - 1}$ 。

小結:

(1)前 x+1 個位置並無結束,可是我能夠巧妙地把問題看做「取完第一個以後,剩下的所有要取完」,因此每一個位置就都獨立了。

(2)「一個數,每次變爲它的一個因子,變成 1 的時候結束」,能夠分開每一個素因子來看,每次把指數減少,若是 x 次結束,至關於隔 x-1 塊版。

(4)$\sum e$ 的和爲 $300000$  ,這隱含的條件是 $e_i$ 的種類數爲 $\sqrt 300000$ ,而後就是一個大暴力了。

相似的,記得之前有某道題 $fgh \le 10000$ ,那麼存在 $f \le 21$ ,而後暴力枚舉 $f$ ,對剩下的兩維就有快速作法了。

三、五邊形數定理

五邊形數從小到大進行排序,能夠描述爲 ..., 1 / 2 i (3i - 1) , 1 / 2 i (3i + 1) , ... ,實現的時候能夠方便地預處理這個順序。

$$\Phi(x) = \prod_{i \ge 1} (1 - x ^ i) = \sum_{i \in \mathbb{N}} (-1) ^ i x ^ {\frac{1}{2} i (3i + 1)} = 1 + \sum_{i \ge 1} (-1) ^ i x ^ {\frac{1}{2} i (3i \pm 1)}$$

五邊形數在前 $n$ 項只有 $O(\sqrt n)$ 項,因此能夠暴力求逆,暴力卷積,暴力 XXX ,總之對於多項式的操做,能夠作到項數相關,若是項數很少,那麼就能夠暴力啊。

分拆數:

$$\prod_{i = 1} ^ n (1 + x ^ i + x ^ {2i} + ...) = \prod_{i = 1} ^ n \frac{1}{1 - x} = \frac{1}{\Phi(x)}$$

原創:給定 $n$ ,求 $n$ 元排列中,逆序對個數爲 $0, 1, ..., n-1$ 的排列的個數。$i$ 的逆序個數爲 $[0, i)$ ,因此直接列生成函數

$$\prod_{i = 0} ^ n (1 + ... + x ^ {i-1}) = \prod_{i = 1} ^ n \frac{1 - x ^ i}{1 - x} \equiv (\sum_i \binom{n + i - 1}{i - 1} x ^ i) \Phi(x) \pmod {x ^ n}$$

分拆數,每一個數的出現次數小於 $k$ :

$$\prod_{i = 1} ^ n (1 + x ^ i + ... + x ^ {i(k - 1)}) = \prod_i \frac{1 - (x ^ k) ^ i}{1 - x ^ i} = \frac{\Phi(x ^ k)}{\Phi(x)}$$

分拆數,全部數不重複:這是上一道題的特殊化形式,能夠直接用上一道題的方法作。

四、置換相關

「2017 Multi-University Training Contest 1」:給定 $n = 100000$ 元排列 $A$ ,以及 $m = 100000$ 元排列 $B$ ,問有多少個 $[0, n)$ 到 $[0, m)$ 的映射,知足 $f(i) = B_{f(A_i)}$ 。

這道題的 Main Idea 就是把一個 $n$ 元排列看做一個置換,剩下的都水稻渠成。

小結(1) :序列 $a_1, a_2, ..., a_n$ 一般均可以怎麼看?能夠看做一個數列,每一個位置有一個數。能夠看做二維平面上的 n 個點。能夠看做第 i 個位置有高度爲 i 的一堆積木。若是是排列,那麼可能會用到每一個數字只出現一次的性質進行計數,例如排列的三維偏序。頗有可能會把排列看做一個置換,特別涉及到比較複雜的映射的問題。

經典題:對於 n 元置換 f ,給定 f ^ 2 ,請構造一個 f 。原來的置換無疑是一個重要的輔助元素,考慮對原先的置換的循環節分大小爲奇數、偶數繼續討論,將新的置換拆成若干個循環節,對大小爲偶數且相同的兩個循環拼起來,大小爲奇數的直接本身造本身。

今天基本上都用來思考這樣一個推廣:對於 n 元置換 f ,給定 f ^ n ,請構造一個 f ,並問有多少個 f ,對 998244353 取模。對原先一個大小爲 $a$ 的置換,會分解爲 $(a, n)$ 個大小爲 $\frac{a}{(a, n)}$ 的置換。對新的置換來講,先把它進行分解,設 c(b) 表示大小爲 b 的置換的個數。考慮枚舉全部的 b ,並嘗試進行合併。考慮能夠將多少個大小爲 b 的東西進行合併,設個數爲 d ,則要知足 $(b, \frac{n}{d}) = 1$ ,因此 $d = (n, b) k$ ,若是 $(n, b) \nmid c(b)$ ,那麼說什麼都不能夠,不然就能夠構造了。至於方案數,設 $f(x)$ 表示將 $x$ 個大小爲 $b$ 的置換進行若干次合併的方案數,則有 $f(x) = \sum_{i = 1} ^ x \binom{x - 1}{i - 1} f(x - i) g(i)$ ,$g(d)$ 表示將 $d$ 個大小爲 $x$ 的東西合併在一塊兒的方案數,若 $(n, b) \nmid d$ ,那麼 $g(d) = 0$ ,不然欽定第一個位置,對第一個循環節內的元素進行欽定——欽定每一個置換的放置順序,以及放置那一個元素,因此 $g(d) = (d - 1) ! s ^ {d - 1}$ 。這時候能夠進行分治 FFT ,或者 EGF ,$F = e ^ G$ 。

5 月 8 日

一、多路歸併

給定 10 個長度爲 100000 的序列,每一個序列中選擇一項,求和的前 100000 小。

能夠考慮每次合併兩個序列,取前 100000 小。第一種作法,把兩個序列從小到大排序,那麼每次的決策對象只有 O(n) 個,能夠在一維平面上拓展,也能夠在二維平面上拓展。第二種作法,注意到要知足 ij <= n ,因此只有 O(n log n) 個,把這些東西取出來,而後排序。

能夠考慮直接作 K 維,直接在 K 維超幾何體上 BFS ,用堆維護較優決策點,每次選擇一個最優的對象拓展,而後枚舉周圍的點,若它的每一維都被緊密相接了,那麼加入較優決策點的集合中,實現起來會有些麻煩。

「2017 Multi-University Training Contest 1」:給定一個仙人掌,求前 K 小的生成樹。把仙人掌的每一個環上的點權弄出來,而後就是上面的問題了。

二、「2017 Multi-University Training Contest 1」

對於每一個位置 i ,給定 L[i] <= i <= R[i] ,問有多少個 1 到 n 的排列,知足對於任意的 i ,當且僅當 L[i] <= l <= i <= r <= R[i] ,a[i] = min(a[l], ..., a[r]) 。

也就是說 i 在 L[i] 到 R[i] 之間最小,且對於更大的區間都不知足。

對總體而言,必定有一個最小值的位置 x ,這個最小值的 L = 1, R = n 。對於其餘的 L, R ,必定不會過點 x ,因此會被劃分到 x 的兩側,因此只須要對兩側進行遞歸處理。假如先遞歸左邊,再遞歸右邊,那麼每次找到的區間的順序就是按照左端點遞增、右端點遞減進行排序的順序。

先考慮斷定有沒有解。那麼就對區間進行雙關鍵字排序,而後直接模擬,進行斷定下個區間是否知足要求 L = 當前分治的 l ,R = 當前分治的 R 。

考慮統計方案數,每次左子樹大小爲 x ,右子樹大小爲 y ,那麼貢獻 $\binom{x + y}{x}$ 。

三、今天基本上都在看機率生成函數,還沒幹完。

5 月 9 日

今天學了挺多東西的。

1、連通圖與通常圖計數

設某個圖上的性質 X ,若每一個連通塊知足性質 X ,那麼整個圖知足性質 X 。

設 f(x) 爲 x 個點的知足性質的連通圖個數,g(x) 爲 x 個點的知足性質的圖的個數。

一方面,有

$$g(x) = \sum_{i = 1} ^ x \binom{x - 1}{i - 1} f(i) g(x - i)$$

$$f(x) = g(x) - \sum_{i = 1} ^ {x - 1} \binom{x - 1}{i - 1} f(i) g(x - i)$$

另外一方面,設 f(x), g(x) 的 EGF 爲 F(x), G(x) ,有

$$F(x) = e ^ {G(x)}$$

$$G(x) = \ln F(x)$$

用處一:給定第一方面,可使用分治 FFT 的作法,也能夠轉化爲第二方面,求 exp 或者求 ln 。

用處二:求 exp 的問題,能夠經過這個組合意義,在 O(n ^ 2) 實現。

2、預處理第一類斯特林數行、第一類斯特林列、第二類斯特林數行、第二類斯特林列、Bell 數

第二類斯特林數:

(1)第二類斯特林數行

根據容斥原理,

$${n \brace m} = \sum_{i = 0} ^ {m} (-1) ^ i \binom{m}{i} (m - i) ^ n$$

(2)第二類斯特林列,OGF

$${n \brace m} = {n - 1 \brace m - 1} + m {n - 1 \brace m}$$

設 $F_m(x)$ 爲 $x \brace m$ 的 OGF ,那麼有

$$F_m(x) = F_{m - 1}(x) x + F_m(x) m x$$

$$F_m(x) = \frac{x}{1 - m x} F_{m - 1}(X)$$

$$F_m(x) = x ^ m \prod_{i = 1} ^ m \frac{1}{1 - ix}$$

能夠利用 ln-exp 的科技求解 $F_m(x)$ 。

(3)第二類斯特林列,EGF,以及第二類斯特林行的另一種見解

考慮 EGF ,$n$ 個點的知足性質的連通圖只有一個,因此 EGF 爲 $e ^ x$ ,因此 $n$ 個點且剛好 $m$ 個連通塊的圖的個數的 EGF 爲

$$F_m(x) = \frac{(e ^ x - 1) ^ m}{m !}$$

能夠用來處理一列的第二類斯特林數。

這種形式也能夠推出一行的第二類斯特林數,原理是直接對上面的生成函數進行二項式展開,並取第 $n$ 項:

$${n \brace m} = [x ^ n] \frac{(e ^ x - 1) ^ m}{m !} = [x ^ n] \frac{\sum_{i} \binom{m}{i} e ^ {ix} (-1) ^ {m - i}}{m !} = \frac{1}{m !} \sum_i \binom{m}{i} i ^ n (-1) ^ {m - i}$$

第一類斯特林數:

(1)第一類斯特林行

根據組合意義,能夠推出

$$x ^ {\overline{n}} = \sum_{i} {n \brack i} x ^ i$$

上面這個式子還有另一種推法,就是根據

$${n \brack m} = (n - 1) {n - 1 \brack m} + {n - 1 \brack m - 1}$$

利用 OGF ,有

$$F_n(x) = (n - 1) F_{n - 1} (x) + F_{n - 1}(x) x = (x + n - 1) F_{n - 1} (x) = ... = x ^ {\overline{n}}$$

第一種作法是分治 FFT ,第二種作法是倍增 + FFT ,能夠用來處理一行的第二類斯特林數。

(2)第一類斯特林列

利用 EGF ,$n$ 個點的知足性質的連通圖個數爲 $(n - 1) !$ ,EGF 爲

$$F(x) = \sum_i \frac{(i - 1) ! x ^ i}{i !} = \sum_i \frac{x ^ i}{i} = - \ln (1 - x)$$

因此第一類斯特林列的 EGF 爲

$$G(x) = \frac{{- \ln (1 - x) - 1} ^ m}{m !}$$

Bell 數:

相似第二類斯特林列的 EGF 作法,Bell 數的 EGF 顯然爲

$$G(x) = e ^ {e ^ x - 1}$$

3、斯特林反演

$$f(x) = \sum_i {x \brace i} g(i) \Leftrightarrow g(x) = \sum_i (-1) ^ {x - i} {x \brack i} f(i)$$

$$f(x) = \sum_i {x \brack i} g(i) \Leftrightarrow g(x) = \sum_i (-1) ^ {x - i} {x \brace i} f(i)$$

證實的話,大概就是用幾條式子進行展開,獲得兩條第一類與第二類的卷積式,而後就能夠輕易證實這四個關係。

斯特林反演能夠用來解決連通圖的相關問題,不只能夠處理連通圖的問題,還能夠處理 10 個連通圖的問題,還能夠定義連通塊的大小爲集合 $S$ 中的數是合法的,經過 Stirling 反演,也能夠求出迷之容斥係數。

對於連通的問題,大體能回憶其連通圖與通常圖計數,還有就是斯特林反演。

「例題」10 個點的一張簡單圖,問有多少個邊的子集,知足保留子集中的邊後,該圖連通。

考慮欽定若干個塊,塊之間沒有連邊,塊內隨便連,而後貢獻上容斥係數後累加,如今求解容斥係數。

設我有某個其實是 $x$ 個連通塊的方案,它應該被計算 $[x = 1]$ 次,實際上在全部更仔細的分塊中被統計,因此

$$[x = 1] = \sum_i {i \brace x} f(i)$$

$$f(x) = (-1) ^ {x - 1} {x \brack 1} = (-1) ^ {x - 1} (x - 1) !$$

再說 「BZOJ」上「異或圖」一題,也是用到相同的思想。

4、無向歐拉圖的一些計數問題

「問題一」n 個點帶標號每一個連通塊有歐拉回路的圖的個數。

考慮構建生成樹,生成樹外的邊的一種選擇方案,樹邊能夠經過樹形 DP 惟一肯定選擇方案,因此答案爲

$$cnt = 2 ^ {\binom{n}{2} - n + 1}$$

「問題二」n 個點帶標號連通歐拉圖個數。

「問題三」給定一張圖,每一個點有奇偶性 $d_i$ ,問有多少種邊的保留方式,使得每一個點的度數知足奇偶性要求。

若是一個連通塊內的 $\sum d$ 爲奇數,直接無解,不然設 $C$ 爲連通塊個數,答案爲

$$cnt = 2 ^ {m - n + C}$$

「問題四」給定一張圖,求有多少個知足每一個連通塊有歐拉回路的邊的子圖。

「問題五」給定一張圖,求知足每一個連通塊有歐拉回路的邊的子圖的邊數的平方和。

「問題六」60 個點無標號圖個數。

套用 Burnside ,枚舉全部的置換,分解成若干個循環節,循環節內部可憐 $\left\{ \frac{s}{2} \right\}$ 條邊,兩個循環節可憐 $(s_1, s_2)$ 條邊,因此總共的方案數爲

$$2 ^ {\sum \left\{ \frac{s_i}{2} \right\}} + \sum (s_i, s_j)$$

發現答案只與分拆方案有關,因此考慮枚舉全部分拆,並統計一種分拆能夠對應多少個置換,個數能夠看做對 $n !$ 種排列都進行生成,而後再去重,應該是

$$\frac{n !}{ \prod_{\text{每種 si ,出現 ci 次}} s_i ^ {c_i} c_i ! }$$

 「問題七」「原創」60 個點每一個連通塊有歐拉回路的圖的個數。

枚舉每種分拆。

對於一個大小爲 s 的循環,考慮內部的連邊,若 s 爲奇數,那麼全部連邊都不會產生影響;若 s 爲偶數,那麼 distance 爲 s / 2 的連邊會使每一個點的度數的奇偶性異或一,其餘能夠隨便連。

考慮兩個連通塊之間的連邊,設循環大小爲 s1, s2 ,則有 (s1, s2) 次機會,左邊的每一個點向右邊連 s2 / (s1, s2) 條邊,右邊的每一個點向左邊連 s1 / (s1, s2) 條邊。若 s2 / (s1, s2) ,s1 / (s1, s2) 都是偶數,那麼隨便連。若存在一個奇數,那麼有 (s1, s2) 個機會對 A 中全部點異或一。若兩個都是奇數,則有 (s1, s2) 次機會,對 A、B 中全部點異或一,咱們在兩個點之間連邊,邊權爲 (s1, s2) 。

到這裏,能夠看出一個循環內全部點的度數奇偶性一致,因此能夠把每一個循環看做一個大點,來進行分析,設 d(x) 爲大點 x 可以異或一的機會次數,即

$$d(x) = \sum_{\text{odd, even} (s_x, s_?)} + [\text{s(x) is even}]$$

問題變爲:每一個點能夠選擇 d(x) 次異或一的機會,連邊的兩個點之間能夠選擇邊權次異或一的機會,問有多少種選擇方案,使得每一個點最終爲 0 。

分每一個連通塊進行討論,這個連通塊的單點異或次數必定要是偶數,並且是偶數時,邊的選擇方案都爲 $2 ^ {\sum_{odd, odd} (s_i, s_j)} - \text{點數} + 1$ 。與點的選擇方案獨立,因此直接相乘。設 $C = \sum d$ ,那麼點的異或方案爲

$$\sum_{2 | i} \binom{C}{i} = [C = 0] + [C \ne 0] 2 ^ {C - 1}$$

組合解釋是對於前面 $C - 1$ 個的選擇方案,最後一個都有惟一的選擇方案與之對應。代數證實能夠經過數學概括法,或者用單位複數根和二項式定理。

綜上所述,答案爲

$$\text{answer} = \frac{1}{n !} \sum_{\text{分拆} P \in \text{Split}(n)} \frac{n !}{ \prod_{\text{每種 si ,出現 ci 次}} s_i ^ {c_i} c_i ! } 2 ^ {\sum \lfloor \frac{s_i}{2} \rfloor + \sum_{\text{even, even}} (s_i, s_j)} \prod_{\text{連通塊}} 2 ^ {\sum_{odd, odd} (s_i, s_j) - \text{點數} + 1} \times ([\sum d = 0] + [\sum d \ne 0] 2 ^ {\sum d - 1})$$

 「問題八」10 個點連通歐拉圖計數

只須要再套用一個斯特林反演,就能夠解決這個問題啦,時間複雜度爲 n * sum ( Bell(i) * 把 n 分拆成 i 個數的方案 )。

這個問題還不太會作,由於不能保證一個循環節內部的連通性。

5、一個卷積

$$C(x) = \sum_{i - j = x} A(i) B(j)$$

作的時候至關於把 B 反過來作,附上了 $n - 1$ 的位移。

好比說,容斥原理帶來的一些 FFT 的問題,最令我惱火的是

$$g(x) = \sum_{i = x} ^ n (-1) ^ {i - x} \binom{i}{x} f(x)$$

6、拋硬幣一類的問題,機率生成函數,2018 集訓隊論文第一篇

(1)設離散隨機變量 X 的機率生成函數爲

$$F(x) = \sum_{i} P(X = i) x ^ i$$

它能夠比較方便簡介的求出隨機變量 X 的指望和方差:

$$E(x) = \sum_i i P(x = i) = F'(1)$$

$$E(x ^ \underline{k}) = \sum_i i ^ {\underline{k}} P(x = i) = F ^ (k)(1)$$

$$Var(x) = E(X ^ 2) - E(X) ^ 2 = F''(1) + F'(1) - F'(1) ^ 2$$

(2)Matrix67 的書裏的一道題目的我想到的五種解法

拋硬幣,問首次出現連續兩次朝上的指望次數。

「作法一」指望的定義

$$answer = \sum_i i \frac{1}{4} f(i - 2)$$

$f(x)$ 表示拋到第 $x$ 次,第 $x$ 次朝下,以前沒有發生過兩次朝上的機率,那麼

$$f(x) = \frac{1}{4} f(x - 2) + \frac{1}{2} f(x - 1)$$

構建 OGF ,有

$$F(x) = \frac{4}{1 - 2x - x ^ 2}$$

$$answer = \frac{1}{4} (F'(1) + 2F(1)) = 6$$

「作法二」指望的阿貝爾求和形式的定義

$$answer = \sum_{i \ge 0} P(X > i) = \sum_i \frac{1}{2} f(i - 1) + f(i) = \frac{3}{2} F'(1) = 6$$

「作法三」機率生成函數

設 $f(i)$ 表示 $i$ 次剛好結束的機率,$g(i)$ 表示 $i$ 次沒有結束的機率,對應的 OGF 爲 $F(x), G(x)$ ,那麼

$$F(x) + G(x) = 1 + x G(x)$$

$$G(x) \frac{x ^ 2}{4} = (\frac{x}{2} + 1) F(x)$$

對第一條式子求導並代入 $x = 1$ ,有

$$F'(1) = G(1)$$

對第二條式子帶入 $x = 1$ ,很容易解得

$G(1) = 6$

「作法四」直接設指望的狀態

設 f(i) 表示當前湊到了 i 個向上,到湊到兩個向上的指望次數。

f(0) = 1 + 1 / 2 f(0) + 1 / 2 f(1)

f(1) = 1 + 1 / 2 f(0) + 1 / 2 f(2)

f(2) = 0

解一下方程,答案就出來了。

「作法五」指望的線性性質

設 f(i) 表示當前湊到了 i 個向上,到湊到 i+1 個向上的指望次數。

f(0) = 1 / (1 / 2) = 2

f(1) = 1 + 1 / 2 (f(0) + f(1)), f(1) = 4

因此答案爲 f(0) + f(1) = 6 。

(3)一個北京集訓時的題目

給定一個字符集爲 m ,長度爲 L 的字符串 S ,每次在末尾隨機生成一個字符,問指望多少次出現 S 。

設 f(i) 表示 i 回合結束的機率,g(i) 表示 i 回合沒結束的機率,相似的列一列式子,第二個式子就考慮對 「在一個未出現 S 的狀態後添加一個 S 後,這個獲得的狀態的機率」進行算兩次,一方面能夠看做 $g_{cur - L} \frac{1}{m ^ L}$ ,一方面能夠看做 $\sum_i a_i f(cur - (L - i)) \frac{1}{m ^ {L - i}}$

$$F(x) + G(x) = 1 + x G(x)$$

$$G(x) \frac{x ^ L}{m ^ L} = \sum_i a_i \frac{x ^ {L - i}}{m ^ {L - i}}$$

對第一個式子求導並代入 $x = 1$ ,而後對第二個式子代入 $x = 1$ ,就能求出當時我百思不得其解的簡單結論:

$$E(x) = \sum_i a_i m ^ i$$

(4)多個串的問題

SDOI 硬幣遊戲

(5)一個有趣的機率問題:每次隨機 $1$ 到某個偶數 $n$ ,若 $x$ 爲奇數,那麼計數器清零,若 $x$ 爲偶數,那麼計數器加一,且若 $x = n$ ,則中止,求結束時計數器的指望值。

從這個例子能夠看出,能夠經過幾率或者指望來列關係式。

5 月 10 日

1、一個經典結論

元素兩兩不一樣、長度爲 $n ^ 2 + 1$ 的序列要麼存在長度爲 $n+1$ 的上升子序列,要麼存在長度爲 $n+1$ 的降低子序列。

證實一:

問題能夠轉化爲,該序列的長度爲 $n$ 的降低子序列的長度最多爲 $n$ ,求證該序列存在長度爲 $n+1$ 的上升子序列。

看到子序列,容易想到 DP 的方法,因此咱們引入這樣一個輔助元素:設 $f(i)$ 表示以 $i$ 爲開頭的最長降低子序列的長度。

而後我思考的方向是去發現 $f$ 與上升子序列的關係,開始並無什麼發現,因此就直接嘗試觀察 $f$ 的性質。對於某個位置 $x$ 做爲開頭,我應該怎樣取它的全部最長降低子序列?那麼確定要取 $y > x, f[y] = f[x] - 1$ 。考慮若干個 $y$ 之間的關係,發現對於 $y_1 < y_2, f_{y_1} = f_{y_2}$ ,確定有 $a_{y_1} < a_{y_2}$ ,不然 $f_{y_1}$ 就能夠由 $f_{y_2}$ 進行更新。因此對 $x$ 的研究也不須要了。

對於 $f$ 值相同的 $y_1 < y_2 < ... < y_m$ ,確定有 $a_{y_1} < a_{y_2} < ... < a_{y_m}$ 。而注意到 $f$ 的取值只有 $1, ..., n$ ,因此根據鴿巢定理,必定存在一個 $f$ 的取值,知足 $m \ge n+1$ ,因此存在長度爲 $n+1$ 的上升子序列。

證實二:

直接利用 dilworth 定理,最長降低子序列能夠看做最長反鏈,數值上等於最小鏈劃分,而最長上升子序列的長度最多爲 $n$ ,因此鏈劃分至少爲 $n+1$ 。

3、51Nod 1355

題意:已知 $n = 10 ^ 5$ 個 $10 ^ 6$ 之內的正整數 $a_1, a_2, ..., a_n$ ,求 $\text{LCM}(\text{fib}(a_1), \text{fib}(a_2), ..., \text{fib}(a_n))$ 對 $1000000007$ 取模。

分析:

(1)fib 序列的更多性質

fib 序列首先會想到通項公式,而後對 LCM 並無什麼幫助,因此要探究 fib 的更多性質,和 gcd 一塊兒考慮一下,或許就能發現

$$(f_n, f_m) = f_{(n, m)}$$

證實:

想看一個很特殊的狀況,

$$(f_0, f_1) = 1$$

$$(f_n, f_{n - 1}) = (f_n - f_{n - 1}, f_{n - 1}) = (f_{n - 2}, f_{n - 1}) = 1$$

注意到

$$f_{(n, m)} = (f_{(n, m)}, f_0)$$

因此考慮模擬歐幾里得算法的過程,只需嘗試證實

$$(f_n, f_m) = (f_{n - m}, f_m)$$

因此須要將 $f_n$ 用 $f_m$ 進行表示,展開試試

$$

\begin{aligned}
f_n & = f_{n - 1} + f_{n - 2} \\
& = 2 f_{n - 2} + f_{n - 3} \\
& = 3 f_{n - 3} + 2 f_{n - 4} \\
& = 5 f_{n - 4} + 3 f_{n - 3} \\
& = f_5 f_{n - 4} + f_4 f_{n - 3}
\end{aligned}

$$

$$f_n = f_{m + 1} f_{n - m} + f_m f_{n - m + 1}$$

$$(f_n, f_m) = (f_{m + 1} f_{n - m} + f_m f_{n - m + 1}, f_m) = (f_{n - m}, f_m)$$

(2)min - max 容斥應用在多個數的 lcm上

嘗試將 gcd 與 lcm 進行聯繫,

$$\gcd = \prod_i p_i ^ {\min a_i}$$

$$\text{lcm} = \prod_i p_i ^ {\max a_i}$$

因此考慮對目標量的指數進行 min-max 容斥,因此

$$\text{LCM}(f(1 .. n)) = \prod_{S \subset [n]} { \left\{ \gcd(f(S)) \right\} } ^ {(-1) ^ {|S| - 1}} = \prod_{S \subset [n]} { \left\{ f(\gcd S) \right\} } ^ {(-1) ^ {|S| - 1}}$$

(3)莫比烏斯反演

設 $c(x)$ 表示 $\gcd S = x$ 的全部 $S$ 的 ${(-1) ^ {|S| - 1}}$ 的和,那麼須要輔助量 $d(x)$ 表示 $x | \gcd S$ 的全部 $S$ 的 ${(-1) ^ {|S| - 1}}$ 的和。

設存在 $n$ 個 $x$ 的倍數,那麼

$$d(x) = \sum_{i = 1} ^ n \binom{n}{i} (-1) ^ {i - 1} = [n \ne 0]$$

在 $O(n \log n)$ 處理出 $d$ ,近而能夠在 $O(n \log n)$ 處理出 $c$ ,答案就是

$$\text{LCM}(f(1 .. n)) = \prod_{i = 1} ^ {1000000} {f(i)} ^ {c(i)}$$

注意 $c(i)$ 可能爲負數,因此 pow(x, t) 時要將 $t$ 先對 $P - 1$ 取模。

(4)小結

首先是 fib 的兩個性質,一個是展開的性質,一個是 (fa, fb) = f(a, b) 。

而後多個數的 LCM 能夠考慮對指數進行 min-max 容斥,轉化爲 gcd 的乘積,我一樣能夠定義每一個指數取第 K 大的函數,而後使用 min-max 容斥轉化爲 gcd 的乘積,不過這就有點太人爲構造了。

4、訓練小結

(1)平時的訓練,應該懷着不斷學會本身不會的東西的態度。真正的迅速,是進行了充分的計劃,而後無限的投入到題目中去,而不是去想作什麼、作什麼,作到一半又作不下去,而後又換一個東西去作,最後只有乾着急而啥都幹不成。

(2)解題要有可以解題的思惟,要有充分的積累。平時訓練的時候就要讓本身充分思考,獨立思考,實在不會的時候再看一點提示,不要看全部,要充分利用這道題的價值。總結的時候要發現本身思考過程當中一些不和諧的地方,以及積累一些常見的模型。

5 月 11 日

1、求 $G$ 使得 $\phi \times G = I$ ,$\times$ 是狄利克雷卷積

(1)結論:

$$\begin{cases} f(p ^ k) = 1 - (p - 1) k \\ f(ab) = f(a) f(b) , (a, b) = 1 \end{cases}$$

(2)第一種思路:打表找規律,先找質數的,再找 $p ^ k$ 的,數論函數可能會具備積性,發現確實具備積性。

(3)第二種思路:

$$g \times \phi = I$$

因爲

$$\phi \times I = Id$$

$$\phi = \mu \times Id$$

$$g \times Id \times \mu = I$$

$$g = I \times I \times {Id} ^ {-1} = \sigma_0 \times (\mu * Id)$$

$$g(n) = \sum_{ab = d} \mu(a) a \sigma_0(b)$$

因爲 $g$ 是兩個積性函數的狄利克雷卷積,因此 $g$ 也是積性函數,再考慮 $g(p ^ k)$ ,顯然:

$$g(p ^ k) = \sum_{i = 0} ^ k \mu(p ^ i) p ^ i \sigma_0(p ^ {k - i}) = (p + 1) - pk = 1 - (p - 1) k$$

 (4)phi 在狄利克雷卷積意義下的逆元

(5)積性函數與狄利克雷卷積相關的性質的推廣

定理一:若 $f$ 是積性函數,則 $f ^ {-1}$ 是積性函數。

證實:設積性函數的全集爲 $S$ ,證實 $(S, \times)$ 是一個阿貝爾羣便可。封閉性由「兩個積性函數的狄利克雷卷積」這個性質能夠得證,結合律由狄利克雷卷積的定義得證,存在單位元 $e = \left\{ 1, 0, 0, 0, ... \right\}$ ,要證實存在逆元,等價於證實存在消去律。

$$\sum_{d | n} a(d) c(\frac{n}{d}) = \sum_{d | n} b(d) c(\frac{n}{d})$$

對 $n$ 用概括法,因而

$$a(n) c(1) = b(n) c(1)$$

由於 $c$ 是積性函數,因此 $c(1) = 1 \ne 0$ ,因此

$$a(n) = b(n)$$

輔助定理一:$(S, \times)$ 知足封閉性、結合律,有單位元,則 $(S, \times)$ 有逆元當且僅當知足消去律。

證實:如有逆元,顯然知足消去律。如有消去律,嘗試對任意的 $a \in S$ 證實有逆元,構造

$$S' = \left\{ a \times x, x \in S \right\}$$

根據封閉性,有 $S' \subset S$ ,因爲知足消去律,因此 $|S'| = S$ ,因此 $S = S'$ ,而 $S$ 中有單位元 $e$ ,因此 $S'$ 中也有單位元 $e$ ,因此存在 $x$ ,使得 $a \times x = e$ 。

定理二:設 $f$ 是積性函數,$g, h$ 是數論函數,$f \times g = h$ ,則 $g$ 是積性函數當且僅當 $h$ 是積性函數。

證實:充分性顯然,考慮必要性。

$$f \times g = h$$

$$f = g ^ {-1} \times h$$

2、「PE 351」Hexagonal orchards

(1)題意:中點按照六邊形的方式向外拓展 ${10} ^ 8$ 層,問從中點不能看到的點的個數。

(2)分析:

首先發現能夠劃分爲若干個三角形,每一個三角形互不遮擋,對每一個三角形計算,答案乘六。而後找找規律,發現沒有規律。可見點個數不難想到某道歐拉函數題,可是這道題的點的座標很差處理,這看似也行不通,也想不到什麼好的輔助問題。

就當我準備放棄的時候,我忽然想到可否對點構造某種變換,使得在一條直線上的點還在一條直線上,不在一條直線上的點也還不在一條直線上,這好像叫線性變換?。。。。而後就把猜測把斜着的三角形給放直,座標就好表示了,以後就是一個經典的數論問題,驗證發現沒有問題,那麼就這樣作了。

(3)構建一個變換

對某個重要的概念進行一個等價的變換,使得其餘的條件變得更加的簡潔可作。

就當我準備放棄的時候,我忽然想到可否對點構造某種變換,使得在一條直線上的點還在一條直線上,不在一條直線上的點也還不在一條直線上,這好像叫線性變換?。。。。而後就把猜測把斜着的三角形給放直,座標就好表示了,以後就是一個經典的數論問題,驗證發現沒有問題,那麼就這樣作了。

平面上有 $100000$ 個點 $(x_i, y_i)$ ,兩個點 $i, j$ 的距離被定義爲 $|x_i - x_j| + |y_i - y_j|$ ,求最遠點對。考慮將點 $(x, y)$ 變換爲點 $(x + y, x - y)$ ,那麼距離能夠表示爲 $\max (|x_i - x_j|, |y_i - y_j|)$ ,因此直接取橫縱座標的極差的較大值。

計算 $A \times B = C$ ,考慮構造能快速進行的變換 $DFT(A), IDFT(A)$ ,使得 $DFT(A) * DFT(B) = DFT(C)$ ,而後就先變換,再點乘,再逆變換解決多項式乘法問題。

給定 $z$ ,求方程 $x ^ 2 + y ^ 2 = 2 z ^ 2$ 的解,考慮令 $u = x - y, v = x + y$ ,那麼 $u ^ 2 + v ^ 2 = z ^ 2$ ,對這個方程解出來,再求得本來的 $x, y$ 。

5 月 12 日

1、模爲素數的高階同餘方程

(1)拉格朗日定理:n 次多項式 f(x) = 0 (mod p), p not div a[n] ,最多有 n 個解。

證實:假設有 n+1 個根,那麼能夠寫做 f(x) = (x - x0) g(x) ,那麼 g(x1, x2, ..., xn) = 0 ,根據概括假設矛盾。

(2)推論一:n 次多項式 f(x) = 0 (mod p) 超過 n 個解,則 p | a[1], a[2], ..., a[n] 。

(3)推論二:d | p-1 ,則 x ^ d = 1 (mod p) 有 d 個解。

證實:根據費馬小定理,x ^ {p - 1} - 1 = 0 (mod p) 有 p-1 個解,而 x ^ {p - 1} - 1 能夠分解爲 x ^ d - 1 和 g(x) ,兩部分的解的個數都取滿,且交集爲空。

(4)n 次多項式 f(x) = 0 (mod p), p not div a[n] 有 n 個解,當且僅當 f(x) 是 x ^ p - x 在模 p 意義下的因式。

證實:

當有 n 個解時,設 x ^ p - x = g(x) f(x) + r(x) ,由於解 x1, x2, ..., xn 也是 x ^ p - x 的解,因此 r(x1, x2, ..., xn) = 0 ,而 r 是 n-1 次的,因此 r(x) = 0 (mod p) 。

當 g(x) f(x) = x ^ p - x 時,因爲 x ^ p - x 的解有 0, 1, ..., p-1 ,達到了上限,因此 f(x) 有 n 個解。

5 月 14 日

1、任意點做爲根的樹形 DP

(1)「ARC 097F」Monochrome Cat

題意:給定一棵 100000 個點的樹,每一個點最初的顏色是黑色或白色,最初你能夠降臨在某個點,每次能夠反轉當前點的顏色,或者走到一個相鄰點並反轉這個點的顏色,問最少走多少次才能使得全部點的顏色爲黑色。

分析:考慮樹形 DP ,f[x -> y], g[x -> y] 表示第一步從 x 走到 y ,而後在 y 的子樹中走若干步,使得全部點的點權爲黑色,並回到根節點 / 不回到根節點的最少步數。狀態數爲 2(n-1) 。最後只須要枚舉降臨到哪一個節點,均攤 O(1) 算 g[0 -> x] 。

(2)「YWW 模擬賽」

題意:給定 n 個點的一棵樹,邊帶向,問以每一個點爲根構建樹形圖,須要改變多少條邊的方向。

分析:直接 DP ,累加子樹中的反向邊樹,最後枚舉每一個點做爲根,而後直接用 2(n-1) 個狀態中的某些湊出這個點爲根時的答案。

(3)小結:

這種寫法的好處在於:

  • 只用合併,不用排除,這可能對一些比較複雜的信息的維護有幫助
  • 寫起來很友好,很簡潔

2、線段樹合併

(1)COT3

(2)「THUWC 2018」求 100000 個點的樹的不超過兩種顏色的連通塊個數。

$f(x, i)$ 表示以點 $x$ 爲根的子樹中,另一種顏色爲 $i$ (能夠不出現)的非空連通塊的個數,而後用線段樹合併進行優化。

(3)求一棵 100000 個點,點權在 100000 之內的樹的全部鏈的最長 LIS 。

維護以每一個點爲根的子樹中,從下往上,最後一個值爲 w 的 LIS f[x][w] ,以及 LDS g[x][w] ,考慮線段樹合併的過程當中更新答案,再特殊加入最後一個值爲 a[x] 的狀況。

一個簡單暴力的拓展:對每一個子樹中詢問全部鏈的最長 LIS 。

(4)小結:不要看到複雜度高,就立刻否決掉某種想法,由於可能能夠優化複雜度。

3、積性函數相關

(1)一種見解

積性函數能夠看做每一個素因子相互獨立,素因子的函數值乘起來能夠獲得最終的函數值。

設 $n = \prod p_i ^ {a_i}$ ,那麼

$$\sum_{d | n} f(d) = \prod_{p ^ a | n} \sum_{i = 0} ^ a f(p ^ i)$$

好比說,

$$\sum_{d | n} \mu(d) = \prod_{p ^ a | n} \sum_{i = 0} ^ a \mu(p ^ i) = \prod_{p ^ a | n} (1 - 1) = [n = 0]$$

好比說,

$$\sum_{d | n} \phi(d) = \prod_{p ^ a | n} \sum_{i = 0} ^ a \phi(p ^ i) = \prod_{p ^ a | n} (1 + (p - 1) \sum_{i = 0} ^ {a - 1} p ^ i) = \prod_{p ^ a | n} p ^ a = n$$

好比說,

$$\sum_{d | n} \mu(d) d = \prod_{p ^ a | n} \sum_{i = 0} ^ a \mu(p ^ i) p ^ i = \prod_{p ^ a | n} (1 - p)$$

(2)若 $f, g$ 是積性函數,則 $f * g$ 也是積性函數,這裏的 * 是點乘。

相關:

若 f 是積性函數,f ^ -1 也是積性函數。

若 f 是積性函數,$f \times g = h$ ,則 g 是積性函數當且僅當 h 是積性函數。

(3)原創題

題意:給定 $n, k$ ,定義數論函數 $f(x) = \sum_{d | x} \mu(d) d ^ k$ ,請你求出

$$\sum_{i = 1} ^ n \sum_{j = 1} ^ n f(\text{lcm}(i, j)) f(\gcd(i, j)) \mod 998244353$$

分析:

$$f(x) = \sum_{d | x} \mu(d) d ^ k = \prod_{p | x} (1 - p ^ k)$$

考慮 lcm(i, j) 中包含了 i 和 j 的素因子的並,gcd(i, j) 包含了 i 和 j 的素因子的交,因此

$$f(i)f(j) = f(lcm(i, j)) f(gcd(i, j))$$

$$answer = \sum_{i = 1} ^ n \sum_{j = 1} ^ n f(i) f(j) = (\sum_{i = 1} ^ n f(i)) ^ 2$$

以後就是一個經典的分段求和、杜教篩。

4、2017 國家集訓隊論文《動態傳遞閉包問題的探究》

(1)最小環的相關問題

「GDOI 2018」無向圖,過點 x 的最小環:以點 x 爲原點求 dij ,找到一個最短路生成樹。一個最小環必定包含一條非樹邊。進一步考慮 LCA 不爲源點的非樹邊,必定存在更優秀的解。因此對全部 LCA(x, y) = 1 的非樹邊,用 dist(1 -> x) + w(x -> y) + dist(y -> 1) 更新答案。

無向圖最小環:枚舉環上最大的點 x ,以及相鄰點 y, z ,用 w(x -> y) + (從點 y 到點 z ,只通過 < x 的中轉點的最短路)+ w(z -> x) ,因此一邊 Floyd 一邊更新答案。

有向圖,過點 x 的最小環:以點 x 爲原點求 dij ,找到一個最短路生成樹,直接枚舉環上的最後一個點 y ,那麼點 y 以前的路徑必定是從 x 到 y 的最短路。

有向圖最小環:Floyd ,最初 f[i][i] = INF 。

(2)傳遞閉包問題

Floyd,O(n ^ 3 / 32) 。

縮點求 SCC ,在 DAG 上記憶化搜索,O(nm / 32) 。

「2014 ACM / ICPC Rregional Beijing」:給定一張無向圖,每次刪除某個點及其後繼,問指望多少次全部點被刪完。利用線性性質,考慮每一個點被刪除的機率,也就是 1 / 它的前驅個數 。因此考慮反向建圖,而後求傳遞閉包。時間複雜度爲 $O(\frac{nm}{32})$ ,空間複雜度爲 $O(\frac{n ^ 2}{32})$ 。若是會 MLE ,那麼考慮每次處理 $T$ 位,空間被優化爲 $O(\frac{n T}{32})$ ,可是常數會增大。

「論文題」最大異或路徑:給定一張 100000 個點的有向圖,每一個點有 100000 之內的點權,詢問全部點 x 是點 y 的前驅,a[x] xor a[y] 的最大值。把 Trie 樹改成長度爲 100000 / 32 的布爾數組,每次查詢前預處理塊的前綴和,用來 O(1) 求區間的 1 的個數。

(3)Floyd 的拓展

每次至關於加入某個中轉點進行轉移。

「2016 計蒜之道複賽」200 個點的無向圖,枚舉全部的 x, y, z ,求從點 x 到點 y ,不通過點 z 的最短路。考慮分治,每次加入左邊的中轉點,分治到右邊,加入右邊的中轉點,分治到左邊。

加入中轉邊 (x, y) ,也能夠處理。設 f[][] 表示原圖的傳遞閉包。加入邊 (x, y) ,若 f[x][y] ,那麼這條新加的邊就廢了,不然對全部能到達 x ,不能到達 y 的點,向 y 的全部後繼連邊。能到達 x ,不能到達 y 的點,至關於 anc(x) cap (V - anc(y)) ,因此須要維護 anc ,而 anc 至關於補圖的 succ 。單次執行的複雜度爲 $O(\frac{n ^ 2}{32})$ ,總複雜度爲 $O(\frac{n ^ 3}{32})$ (這優於每次執行的複雜度上界相加)。

能夠 Floyd 能夠比較好的支持加入單點,以及撤銷,因此對於又要加、又要刪的問題,能夠考慮用時間線段樹進行分治。

5 月 15 日

1、競賽圖相關

(1)

(2)n 個點的競賽圖必定存在一條哈密頓路徑。

(3)n 個點的強連通競賽圖必定存在哈密頓迴路。

(4)n 個點的強連通競賽圖存在大小在 [3, n] 之間的強聯通競賽子圖,也就存在大小爲 [3, n] 的簡單環。

(5)n 個點的強連通競賽圖的個數。

減法原理,而後枚舉最後一個強連通份量中的點的個數。

$$f(n) = any(n) - \sum_{i = 1} ^ {n - 1} any(n-i) f(i)$$

若是要作到一個 log ,考慮構建指數生成函數,

$$G = F + F ^ 2 + ... = \frac{1}{1 - F}$$

$$F = 1 - \frac{1}{G}$$

多項式求逆模板題。

(6)「NOI 模擬賽」:n 個點,至少存在一個大小爲 K 的簡單環的競賽圖個數。

(7)「POI 2017」:給定一個競賽圖,求從每一個點出發可以走出的最長路。

2、思路

看清全部的可能性,能進能退。

換句話說:不會作的時候,要能肯定本身不會作。

切忌看着問題發呆,等着念頭的降臨。

切忌盲打盲撞,撞不對就滿盤皆輸。

5 月 16 日

1、NOI 模擬十三:Problem B

題意:給定 $10 ^ 9 \times 10 ^ 9$ 的網格圖,網格的邊長爲一,每一個單位子矩形內都有一個以中心做爲圓心,半徑爲 $R = \frac{R_0}{10 ^ 6}$ 的點,問從左下角能看到多少個點。

式子化下來是存在 $x, y$ ,使得

$$\frac{|Bx - Ay|}{\sqrt{A ^ 2 + B ^ 2}} < R$$

要去考慮 $|Bx - Ay|$ 的最小值。

首先,應該要穩步推動,去觀察求這個東西的最小值有什麼可能性,應該能夠從代數和幾何的角度去研究,可是解決問題的關鍵在於觀察到 $x, y$ 是整數,因此這其實是個數論問題。

其次,積累一點經驗,定義在整數域上的函數可能會去用數論解決問題。

2、NOI 模擬十三:Problem C

題意:給定一棵 $100000$ 個點的樹,兩我的玩遊戲,Alice 先手,雙方輪流將某個未染色的樹的結點染成 Alice 色和 Bob 色,設最後樹上有 A 個 Alice 色連通塊,B 個 Bob 色聯通塊,Alice 要使得 A - B 最大,Bob 要使得 A - B 最小,問在最優策略下,最後 A - B 的值。

當想不到怎麼作的時候,除了考慮一些特殊化、通常化、類比的輔助問題以外,還能夠去考慮對問題的某個主體構建一個等價的變換,使得條件變得間接可作。

同色連通塊個數,能夠看做總點數 - 兩邊同色的邊數。這個問題中總點數必定,兩邊同色的邊數考慮再作一個變換。定義一個點的點權爲度數,那麼 Bob 的點權和 - Alice 的點權和 = 2 ( 雙 Bob 色邊數 - 雙 Alice 色邊數 ) 。

一個相似的問題:給定一棵 100000 個點的樹,每條邊的點權在 15 之內,每次選定一條路徑異或一個數 x ,問最少多少次全部邊權爲 0 。構建一個等價的變換,定義一個點的點權爲全部相鄰的邊權的異或和,那麼每次至關於對兩個點的點權異或 x ,最終要求全部點的點權爲 0 。問題能夠重述爲有若干個值,每次能夠選擇兩個異或 x ,使得最終全 0 。一次異或看做一條連邊,那麼一個連通塊就要求點權異或和爲 0 。對於最優解,一個聯通塊確定沒法分解,因此至少須要 n-1 次連邊,而 n-1 次連邊能夠構造獲得。因此最終所求就是劃分紅若干個連通塊,使得 n - 連通塊個數最大,因此連通塊個數最多。若是一個數出現了 x > 2 次,則能夠將 2 個組隊,最後保證每一個數只出現一次,而後狀壓 DP 。

3、NOI 模擬十三:Problem A

題意:區間 and ,區間 or ,區間最大值。

考慮線段樹,若是一個區間的某個要修改的位置已經全同樣了,那麼修改完仍是全同樣的,並且最大值能夠直接維護,因此考慮延時。

用位運算把一個 log 給優化。

考慮用兩個 tag :same, appoint ,same 表示哪些位置同樣,appoint 表示欽定這些位置的值爲 0 / 1 。我就卡在用了一個三進制的 tag 。

一個相似的問題:區間 and ,區間 or ,區間 xor ,單點查詢。能夠拆位來作,兩個 log 。能夠打 tag ,表示爲 and A or B xor C ,而後一個 log 。

一個相似的問題:區間 and ,區間 or ,區間 xor ,區間求 xor ,區間求和。直接拆位,開 20 個線段樹。

5 月 17 日

1、NOI 模擬十四:Max

題意:40 個變量 X = {0, 0, 0, ..., 0} ,10 次操做,第 i 次操做有 p[i][j][k] 的機率將 x[j] 增長 k ,k 屬於 [0, C], C 不超過 4 ,問全部操做後的最大值的指望。

場上連 m = 10 ,能夠設計狀壓算法都沒有發現,真是菜得不行。。。首先,仍是要加強本身的洞察力,要修煉。其次,對題目有清晰的理解,把已知、條件、未知分行寫下來以後,要對每一個細節進行考慮,包括了已知量的數據範圍給的信息。

還有就是 DP 的時候,考慮設置的狀態是一個前綴,設 f[i][j][k] 表示最大值不超過 j ,而不是等於 j ,否則轉移的時候還須要前綴和(事實上,我就是經過須要用前綴和優化轉移,纔想到前綴和的意義,進而用前綴和直接轉移)。

2、BJ 模擬:Hanoi

題意:有 1e6 個圓盤,有三個塔,給定起始狀態、終止狀態,求最少移動次數。

考察分析能力。

改編:有 1e6 個圓盤,三個塔,給定起始狀態、終止狀態,每次只能移動到相鄰的一座塔,求最少移動次數。

5 月 18 日

1、BZOJ 3100:排列

題意:給定長度爲 1e6 的序列,每一項在 1 到 n 之間,求最大的 k ,存在一個連續子序列,爲 [1, k] 的排列。

按照常規的想法並不容易想到,可是應該要在失敗中發現可能性。(1)若是隻是由於複雜度的問題,那麼能不能優化,優化能夠考慮分治、分塊、數據結構之類的。(2)哪一個地方,最有可能讓我發現新的意義?對於一個肯定的 k ,思考怎麼判斷如何存在一個 [1, k] 的排列?我只會用 Hash 的方法進行判斷,而後還不能二分 k ,可是這個細節的意義太少了,應該沒有挖掘完。所以從這裏入手,再仔細想一想,或許就能發現:一個長度爲 k 的序列是 [1, k] 的排列,當且僅當不存在重複的數字,且和爲 k * (k + 1) / 2 。

2、ARC 063E:木と整數

題意:給定一棵 100000 個點的樹,以及若干個點的點權,請填寫剩下的點的點權,使得有邊相鄰的兩個點的點權差值在 1 之內。

考慮先鬆弛,實現上就是從下往上鬆弛,從上往下鬆弛,由於確定不會回頭鬆弛,鬆弛過程出現 emptyset 就直接輸出 -1 。而後對於相鄰的兩個點,限制爲 [L1, R1], [L2, R2] ,就有 L2 <= L1 - 1, L1 <= L2 - 1 ,即 |L1 - L2| <= 1 ,因此直接取左端點的點權就構造完成了。

這是鬆弛操做在序列、樹上的一類特殊問題。

序列:n 個點,點 i 和點 i+1 之間的邊權爲非負整數 a[i] ,從超級源點 S 到每一個點有一個距離 d[i] ,問從超級源點 S 走到每一個點的最短路。

樹:n 個點構成一個樹,每條邊的邊權非負,從超級源點 S 到每一個點有一個距離 d[i] ,問從超級源點 S 走到每一個點的最短路。

3、ARC 063F:すぬけ君の塗り絵 2

題意:在 w × h 的矩形內,有 100000 個點,找到一個不包含任何點的周長最大的矩形。

首先要發現一個答案的下界:2 * (max(w, h) + 1) ,設答案長爲 a ,寬爲 b ,則必定有 a > w / 2 或 b > h / 2 ,因此必定過 x = w / 2 或 y = h / 2 。而後沒發現也沒關係,多一個 log 去分治吧。對於一個最值問題來講,能夠考慮去 DP ,能夠二分或枚舉,能夠比較決策點的優劣,或者發現最優決策點所具備的特性。而這道題給個人啓發是,出發點能夠是去考慮一些特殊的解,找到答案的一個界,再和其餘的決策點進行比較,或許就能發現最優決策點的一些性質。

我也想過度治啊,然而仍是想不到,由於我考慮必定過 x / 2 ,而後把座標按照 x 的順序來進行掃描。。。實際上應該按照 y 來掃描。。。對於二維平面上的點進行掃描,能夠橫着掃描,也能夠豎着掃描。。。。

知道要掃描,那麼以後直接移動一下端點,維護一個答案就行了。然而我不會實現啊。。。如今能口述一遍實現嗎?

5 月 19 日

1、NOI 模擬十五:Table

題意:

1e7 × 1e5 的數表,知足對於 $i > 1$ ,有

$$f(i, j) = a \times f(i-1, j) + b \times f(i-1, j-1)$$

給定數表的某一行,100 組詢問,求某個位置的值 mod 998244353 。

(1)利用一個式子來求逆元

能夠推出

$$\frac{f(x+1, y)}{a ^ x} = \sum_{i} f(1, i) \binom{x}{y - i} (\frac{b}{a}) ^ {y - i}$$

$\binom{x}{i} (\frac{a}{b}) ^ i$ 的逆元是什麼。。。場上我直接用多項式求逆了,而後這個能夠直接利用下面這個式子來求逆元。

$$\frac{1}{1 - x} = \sum_i x ^ i$$

$$\frac{1}{(1 - x) ^ n} = \sum_i \binom{i + n - 1}{n - 1} x ^ i$$

$$\frac{1}{(1 + x) ^ n} = \sum_i \binom{i + n - 1}{n - 1} (-1) ^ i x ^ i$$

考慮 $\binom{p}{i} (\frac{a}{b}) ^ i$ 的生成函數,爲

$$\sum_i \binom{p}{i} (\frac{a}{b}) ^ i x ^ i = (\frac{a}{b}x + 1) ^ p$$

$$\frac{1}{\sum_i \binom{p}{i} (\frac{a}{b})} ^ i x ^ i = \sum_i \binom{i + n - 1}{n - 1} (-1) ^ i (\frac{a}{b}) ^ i x ^ i$$

(2)既然我能夠用第一行來求。。。事實上我知道任意一行,就能夠用這一行,利用組合意義來推導出其餘某行的某個位置的值了啊。。。

(3)一道相似的題:Frightful Formula,更巧妙的是,那道題獲得了一個含組合數的數字,能夠設計與組合數的指標相關的 DP 。

2、計蒜客初賽:A 題

題意:給定二維平面上的 n 個點,選擇兩個點,使得兩點斜率的絕對值最大。

按照點的座標進行排序,考慮相鄰兩個點就行了。證實的話,考慮最優的決策點須要知足的性質,若是中間存在一個點,畫畫圖就會發現有更大的。以爲挺巧妙的,分享一下。。。

5 月 20 日

1、牛客練習賽 18 :F 題

題意:

給定 2e9 範圍內的整數 $a, b, c, d, A, B$ ,

$$\text{maximize} ~ Z = x + y \\ \begin{pmatrix} a & b \\ c & d  \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} \le \begin{pmatrix} A \\ B \end{pmatrix}$$

分析:

如今至關於要在過第一象限、朝左下方向的兩個半平面與第一象限的交內,找到 $x + y$ 最大的整點,那麼 $y_{\max}$ 是關於 $x$ 的帶取整符號的分段函數,對每一段進行討論,至關於要最大化

$$x \in [l, r], x + \lfloor ax + b \rfloor$$

因爲 $x$ 是整數,能夠將 $x$ 放進取整符號內,而後就能夠先看成一次函數作,而後再取整了,時間複雜度爲 $O(1)$ 。

2、NOI 模擬十六:xiz

題意:定義 $S = T$ 當且僅當存在一個字符之間的雙射,進行變換後 $S$ 和 $T$ 能徹底重合。給定一個字符串 $S$ 和一個字符串 $T$ ,找到有多少個 $S$ 的子串等於 $T$ 。

魔改 KMP 。

一個相似的問題,USACO Cow Pattern:定義 $S = T$ 當且僅當每一個位置的字符在整個字符串中的 rank 值相同,找到有多少個 $S$ 的子串等於 $T$ 。作法相似,不過須要使用兩個樹狀數組來維護匹配時的 rank 。

3、NOI 模擬十六:yja

題意:有 8 個點到原點的距離分別爲 r1, r2, ..., r8 ,請安排這 8 個點的位置,最大化這些點構成的凸包的面積。

(1)二元函數 $f(x, y)$

它的圖像是什麼?我看到的是一座山的模型。就是對於每一個座標來講,都有一個高度,並且是連續的。

偏導是什麼?對於某個點 $x, y$ ,當 $x$ 要發生微小移動卻尚未移動時,$y$ 想移動的方向就是偏導(這是一條直線),當 $y$ 想要發生微小移動卻尚未發生時,$x$ 想移動的方向也是偏導。

對於兩個二元函數相切的位置,想要移動的方向是一直的,因此偏導成倍數關係,$\delta f_x = \lambda \delta g_x, \delta f_y = \lambda \delta g_y$ 。

(2)拉格朗日乘數法

考慮一個簡單的問題,

$$\text{maximize} ~ z = x ^ 2 + y ^ 2 \\ s.t. ~ xy = 3$$

能夠看做有一個盆地,你要找到一個高度最低的橫截面,使得這個橫截面與 $xy = 3$ 有交。想象三維空間內從下往上掃描,橫截面從沒有交點、到某個時刻有兩個交點、再到以後有四個交點。。。我須要找的就是有兩個交點的時刻,也就是 $z = x ^ 2 + y ^ 2, (\forall z, xy = 3)$ 的相切的地方,因此就能夠列出交點知足的三個關係:

$$xy = 3 \\ 2x = \lambda y \\ 2y = \lambda x$$

因此當 $x = y = \sqrt 3$ ,$z$ 取得極值 $6$ 。

通常化的,對於

$$\text{maximize} ~ f(x_1, x_2, ..., x_n) \\ s.t. ~ g(x_1, x_2, ..., x_n) = k$$

能夠轉化爲求全部極值點,極值點知足

$$f_{x_i} = \lambda g_{x_I} \\ g(x_1, x_2, ..., x_n) = k$$

(4)特殊情形

$$\text{maximize} ~ f(x_1, x_2, ..., x_n)$$

那麼至關於對全部偏導要等於 $0$ 。

(3)分析:枚舉凸包上的點和順序,而後用拉格朗日乘數法就解決啦。

4、NOI 模擬十六:zkb

(1)區間排序:內部維護線段樹,外部用 set 維護全部的樹的根節點。

(2)乘積的最高位:考慮 log10 ,而後小數部分;或者 double 直接作,保證始終 < 10 。

5、AGC 024

只作了三道題。。

(1)A 題:給定 A, B, C(1e9),進行 K(1e18) 次操做,每次將每一個數變成另外兩個數的和,問 K 次操做後 A-B 的值。

考慮 A - B, B - C, C - A 的變化,發現會取相反數,因此作 K & 1 次就行了。

(2)B 題:給定一個 1 到 2e5 的排列,每次能夠將某個數放到序列的最前面或最後面,問最少多少次能變成 1 .. n 。

最後剩下的必定是連續一段,操做次數爲 n - 連續一段。而對於任意連續一段,顯然能夠構造使得它們最後剩下。因此找到最長的一個子序列,知足數值連續。

(3)C 題:最初有 0, 0, ..., 0 ,每次能夠將 a[x+1] 變爲 a[x] + 1 ,問可否變成最終的 b, 以及最少操做次數。

從前日後,每次找一段連續上升的,設長度爲 re ,下一個爲 x ,一個必經狀態是 x 的前 x 個爲 0, 1, ..., x ,這確定在 re 這些以前進行,因此判斷 re 和 x 的大小關係,答案加上 re - 1 。

5 月 21 日

1、NOIP 模擬二

圍觀了一些樓下作的題。

(1)排序:給定 $[1, 2 ^ n], n = 12$ 的排列,對於每一個 $0 \le i < n$ ,對應將序列劃分爲 $2 ^ {n - i}$ 個大小爲 $2 ^ i$ 的段,而後交換其中兩段的操做,每種操做最多隻可使用一次,問有多少個操做序列能將排列排序。

須要一點點分析能力吧,而我連這點分析能力都很不具有。首先,要注意到操做順序並不影響最終,若是有 $use$ 個操做,那麼這個操做對應着 $use!$ 個操做序列。考慮對 $i$ 從小到大進行操做,那麼作完操做後,必定要合成若干個大小爲 $2 ^ {i + 1}$ 的連續段,找到當前有 $tot$ 個大小爲 $2 ^ {i + 1}$ 的段不知足要求,若 $tot = 0$ ,那麼繼續,若 $tot = 1$ ,那麼交換這個段的先後兩部分,若 $tot = 2$ ,分四種狀況進行討論,而後繼續 DFS 。

(2)征途:$n = 3000$ 條道路,$m$ 天從 $0$ 走到 $n$ ,最小化這 $m$ 天走的距離的方差。

$$Var(x) = E((x - E(x)) ^ 2) = E(x ^ 2 - 2 x E(x) + E(x) ^ 2) = E(x ^ 2) - E(x) ^ 2$$

對於離散的狀況,設 $s1$ 爲全部數的和,$s2$ 爲全部數的平方和,總共有 $n$ 個數,

$$Var(x) = E(x ^ 2) - E(x) ^ 2 = \frac{s2}{n} - \frac{s1 ^ 2}{n ^ 2}$$

(3)配對:有 $200$ 種數,每種數值爲 $a_i({10} ^ 9)$ ,個數爲 $b_i({10} ^ 5)$ ,價值爲 $c_i(|{10} ^ 9|)$ 。若數 $i, j$ 知足 $j \mid i$ ,且 $i / j$ 是質數,則能夠配對,並貢獻 $c_i \times c_j$ 的價值。進行儘量多的配對,使得價值之和大於 0 。

能夠配對的數之間進行連邊,發現能連邊的數的指數之和差一,因此能夠按照指數之和的奇偶性分類,那麼就是一個二分圖。

剩下的問題就是二分圖匹配,邊帶邊權,要求權值之和大於 $0$ ,考慮跑最大費用流,那麼就取費用 > 0 的最後時刻的匹配個數。

2、陳立傑《計數》:有趣的容斥原理

(一)連通圖計數

(1)$n$ 個點的連通圖計數。

連通的話,能夠去考慮從總體上看,或者用總的方案減去不連通的圖的個數。

一種想法是直接利用指數生成函數,

$$G = e ^ F$$

$$F = \ln G$$

而後就直接 $O(n \log n)$ 。

第二種想法是去容斥,考慮斯特林反演,

$$f(n) = \sum_{s_1 + s_2 + ... + s_m = n} (-1) ^ {m - 1} (m - 1) ! \binom{n}{s_1, s_2, ..., s_m} \prod_{i = 1} ^ m 2 ^ {\binom{s_i}{2}}$$

這個作法的話我就只會 $O(n ^ 2)$ 的 DP 了,想不到怎麼處理 $(-1) ^ {m - 1} (m - 1) !$ 。

第三種想法,考慮怎麼計算不連通的圖的個數,那就枚舉一號點所在的聯通快的大小,

$$f(n) = g(n) - \sum_{i = 1} ^ n \binom{n - 1}{i - 1} f(i) g(n-i)$$

複雜度爲 $O(n \log ^ 2 n)$ 或 $O(n ^ 2)$ 。

(2)$n$ 個點 $m$ 條邊的圖有多少個邊的子圖是連通圖。

第一種想法,考慮斯特林反演,複雜度爲 $O(Bell(n) n ^ 2)$ 。

第二種想法,考慮用總的方案減去不連通的方案,設 $f(S)$ 表示 $S$ 的誘導子圖有多少個邊的子圖是連通圖,$g(S)$ 表示 $S$ 的誘導子圖有多少邊的子圖不是連通圖。

$$f(S) = 2 ^ {ways(S \to S)} - g(S)$$

$$g(S) = \sum_{T \subset S, T \ne \emptyset} f(T) g(S - T)$$

(二)DAG 計數

考慮 $n$ 個點的 DAG 計數,DAG 能夠不重不漏地描述爲:按照以前的點到該點的最大距離分層,每次添加一層點。

因此考慮枚舉下一層有哪些點,並貢獻容斥係數,

$$f(n) = \sum_{i = 1} ^ n (-1) ^ {i - 1} \binom{n - 1}{i - 1} f(n - i) 2 ^ {(n - i) \times i}$$

(三)強連通圖計數

$n$ 個點的強連通圖有多少個?

用有向圖的個數減去不是強連通的圖的個數,不是強連通的圖,縮點以後是一個 DAG ,因此對這個 DAG 進行 DP 。

$$f(n) = 2 ^ {n (n - 1)} - \sum_{i = 1} ^ n \binom{n - 1}{i - 1} f(n - i) 2 ^ {(n - i) \times i} g(i)$$

其中 $g(n)$ 表示 $n$ 個點的由奇數個強連通圖組成的圖的個數減去 $n$ 個點的由偶數個強連通圖組成的圖的個數。

$$g(n) = - \sum_{i = 1} ^ {n} f(i) g(n - i)$$

(四)雙聯通圖計數

$n$ 個點 $m$ 條邊的一個圖,有多少個邊的子集構成的圖是邊雙聯通圖?

考慮用連通圖的個數減去不是邊雙聯通的連通圖的個數,不是邊雙聯通的連通圖在縮點以後能夠看做一棵樹。

這時候一種可能性是枚舉這棵樹的每個點,對每一個點先進行好 DP ,而後用 Matrix-Tree 計算一下把它們連成一棵樹的方案數。

第二種可能性是能夠描述爲找到標號最小的點所在的新點做爲根節點,而後將其餘的接到當前點,其餘的接到當前點也能夠 DP 。

設 $ways(S, T)$ 表示把 $T$ 中的接到 $S$ ,則

$$ways(S, T) = \sum_{T' \subset T, \min T \in T'} ways(S, T - T') \times \text{T' 有多少個子圖是連通圖} \times \text{T' 到 S 的連邊數量}$$

3、板子練習

太菜了要打點板子,練了兩個板子,都是這道題,看似是 xjr 的學校的 OJ 。。。

http://zijian-lv.com/problem/3

題意:2e6 個點的樹,2e6 組詢問,求某個子樹內距離 >= k 的全部點的點權和。

板子一:DSU ,須要卡一卡常。

關於實現複雜度,每一個點須要被遍歷到該點向上的輕邊次,而走一次輕邊子樹大小至少翻一倍,因此 $O(\log n)$ 條輕邊,總複雜度就是 $O(n \log n)$ 。

void DSU(int x, int dep, int ReM) {
    Fore(x)
        if (v != son[x])
            DSU(v, dep + 1, 0);
    if (son[x] != x)
        DSU(son[x], dep + 1, 1);
    ad(dep, + a[x]);
    Fore(x)
        if (v != son[x])
            Put(v, dep + 1, +1);
    LL Sn = qr(MX);
    for (int k2 = hd2[x]; k2; k2 = qs[k2].nx) {
        int k = qs[k2].k, id = qs[k2].id;
        ans[id] =    dep + k <= MX ?
                        Sn - qr(dep + k - 1)
                    :
                        0;
    }
    if (! ReM)
        CLR(x, dep);
}

板子二:長鏈剖分

考慮一個點何時會枚舉它的全部深度,那麼就是它和它的父親不在一條長鏈上,因此每條長鏈只有根節點會貢獻鏈長的複雜度,把複雜度分配到每一個點,那麼每一個點有且僅有一點複雜度,因此時間複雜度爲 $O(n)$ 。

實現的時候注意怎麼動態開數組,new int [=_=] 。

4、Pony.ai :AStringGame

題意:給定一個長 1e5 的字符串以及若干個它的子串,Alice 和 Bob 又在玩遊戲,Alice 先手,輪流操做,每次能夠將一個字串在末尾添加一個字符,使得還是子串,誰不能操做誰輸。

繼續練板子,後綴自動機 + SG 函數。

5 月 23 日

1、NOI 模擬十八

今天好像都是傻叉題。。。我交完開頭四法,8 點鐘的時候就直接棄了提答去作其餘東西了。。

(1)Escape:給定一棵樹,每一個點有點權,對每一個點 x ,求

$$\sum_y [dis(1, x) \ge dis(1, y)] a_y$$

每一個點會貢獻到一個子樹,因此直接用 DFS 序 + 前綴和,$O(n)$ 水過。

(2)Machine:給定 $f(1), f(2), ..., f(10 ^ 5)$ ,$1000$ 組詢問,求

$$(f \times I \times I \times ... \times I)(x), x \le {10} ^ 5, k \le {10} ^ 5$$

根據組合意義,

$$x = \prod p_i ^ {a_i}$$

$$I ^ k(x) = \prod \binom{a_i + k - 1}{k - 1}$$

總之也算是積累了 $I ^ k(x)$ 的意義吧。

2、beamer 基本用法

\documentclass{beamer}
\usepackage{ctex}
\begin{document}
\title{yww 太強了}
\author{Sdchr}
\maketitle
\begin{frame}{主標題}{副標題}
  yww 天下第一
\end{frame}
\begin{frame}[t]{主標題}{副標題}
  yww 天下第一
\end{frame}
\end{document}

其他東西遇到現場學。

3、洛谷 5 月月賽:取石子(NIM 遊戲,階梯博弈,SG 函數)

首先是經典的 NIM 遊戲。對於 $xorsum \ne 0$ ,必定可以把某個數減少使得 $xorsum = 0$ ;對於 $xorsum = 0$ ,任意一種變化都會使得 $xorsum \ne 0$ 。先手必勝當且僅當 $xorsum \ne 0$ 。

關於 NIM 遊戲,我還想到了這樣一個問題:判斷先手必敗仍是必勝?第一步有多少種操做方案能使得先手必勝?要找的數知足 $a_i ~ xor ~ s < a_i$ ,能夠直接考慮 s 的 highbit ,ai 知足要求當且僅當當前這位是 1 ,直接用大小爲 32 的數組維護一下。因而我就能夠出一些 NIM 與 Trie 結合的問題,好比說:給定一個長度爲 1e5 的序列,1e5 次操做,每次操做要麼單點修改,要麼區間查詢 NIM 遊戲的勝負,若能勝,有多少種方法能勝。

接下來是階梯博弈的問題。若奇數層的異或和等於 $0$ ,那麼後手有策略必勝,他的策略是,若另外一方把偶數層的移到奇數層,那麼他就把這些再往前移一層,若另外一方移動奇數層的移動到偶數層,那麼至關於在某堆石子中取掉一些,對應的玩一玩 NIM 遊戲就行了。而若奇數層的異或和不等於 0 ,那麼先手能玩一玩 NIM 使得異或和爲 0 ,而後用以前的解釋,先手就必勝了。因此先手必勝當且僅當奇數層的異或和不爲 0 ,後手必勝當且僅當奇數層的異或和爲 0 。

階梯博弈的模型能夠推廣到樹上,取全部奇數層的點玩 NIM 遊戲就行了。

洛谷五月月賽,取石子:有 n 堆式子,第 i 堆有 a[i] 個,最初保證 a[i] >= a[i-1] ,每次能夠將某堆 a[i] > a[i-1] ,將第 i 堆移走一個,A 先操做,雙方輪流操做,誰不能操做誰輸,問誰贏誰輸。取差分,考慮奇數位置的和的奇偶性,推理思想和階梯 NIM 一致。

冬令營模擬賽,養分餐:給一棵樹,每一個點有點權 $a_i, b_i$ ,最初保證 $a_i \ge \sum_{(i, v)} a_v \times b_v$ ,每次能夠將某個 $a_i$ 減一,問誰贏誰輸。取 $c_i = a_i - \sum_{(i, v)} a_v \times b_v$ 。取差分,而後推理思想和階梯 NIM 同樣。

BZOJ 1115:取差分,而後玩階梯 NIM 。

我在想一個問題,階梯博弈能不能推廣到通常的圖上?通常圖感受沒有但願,那就考慮一種特殊的圖——二分圖。而後我就能夠設計這樣一個問題:有 $n$ 個點的一張圖,每一個點上有 $a_i$ 個石子,每次能夠選定一個點 $x$ ,而後將點 $x$ 上的若干個石子,能夠移動到點 $x / prime$ 上,問誰能贏?這時候會發現,階梯 NIM 的思想仍然能成立——對於指數之和爲偶數的點,先手移動了,後手也移動;對於指數之和爲奇數的點,至關於玩 NIM 。

接下來,今天我也補全了對 SG 函數的一些理解。在 ICG 模型中,能贏當且僅當異或和不爲 0 。這裏的證實與階梯 NIM 也是相似的。設異或和爲 S 。若 S = 0 ,則後手有必勝策略:當先手將某個值爲 $x$ 的地方的石子移動到某個值爲 $y$ 的地方,那麼確定有 $x \ne y$ ,若 $x > y$ ,那麼玩 NIM 遊戲,若 $x < y$ ,那麼能夠將這個石子取回到一個值爲 $x$ 的地方。反之 $S \ne 0$ ,先手有必勝策略。

4、洛谷 5 月月賽:玩遊戲(多項式取對數、取指數)

(1)一些知識的回顧

$$\ln (1 - x) = - \sum_{i \ge 1} \frac{x ^ i}{i}$$

證實:

$$F(x) = \ln (1 - x)$$

$$F'(x) = - \frac{1}{1 - x} = - \sum_{i \ge 0} x ^ i$$

$$F(x) = - \sum_{i \ge 1} \frac{x ^ i}{i}$$

對於多項式連乘的形式,好比說

$$F(x) = \prod_{i = 1} ^ n {(1 - a_i x ^ {b_i})} ^ {c_i}$$

若是指數之和不大,那麼能夠分治 FFT 求。

若是形如 $(1 - a_i x ^ {b_i}) ^ {c_i}$ 連乘,就可能能夠先求 ln 後的值,再取 exp :

$$
F(x) = \prod {(1 - a_i x ^ {b_i}) }^ {c_i}
$$

$$\ln F(x) = \sum c_i \ln (1 - a_i x ^ {b_i}) = \sum - c_i \sum_{j \ge 1} \frac{a_i ^ j x ^ {b_i j}}{j} = \sum_t x ^ t \sum_{b_i j = t} \frac{- c_i a_i ^ j}{j}$$

(2)一個新的 idea :反向的運用

題意:給定長度爲 $n \le {10} ^ 5$ 的數組 $A$ ,以及長度爲 $m \le {10} ^ 5$ 的數組 $B$ ,對 $t = 1, 2, ..., {10} ^ 5$ ,求在 A, B 中分別隨機取一個數時,$(a_i + b_j) ^ t$ 的指望。

$$E({x + y} ^ t) = \sum_i \binom{t}{i} E(x ^ i) E(y ^ {t - i})$$

問題變爲,對於 $t = 1, 2, ..., n$ ,求出

$$f(t) = n E(x ^ t) = \sum_{i = 1} ^ n a_i ^ t$$

考慮構建 OGF ,則有

$$
F(x) = \sum_{t \ge 0} \sum_{i = 1} ^ n a_i ^ t x ^ t
$$

嘗試對 $F(x)$ 構建一個多項式到多項式的變換,這個變換及其逆變換可以快速實現,而後能用對 exp 快速處理,而後取 ln 的方法來計算新的多項式 $G(x)$ 。
$$
G(x) = n + \sum_{t \ge 1} \frac{- 1}{t} \sum_{i = 1} ^ n (a_ix) ^ t = n + \sum_{i = 1} ^ n \ln (1 - a_i x)
$$

$$
H(x) = \sum_{i = 1} ^ n \ln (1 - a_i x)
$$

$$
e ^ {H(x)} = \prod_{i = 1} ^ n (1 - a_i x)
$$

(3)小結

對於要計算函數 $f$ 的若干項,能夠考慮多項式,從總體上來考慮這個問題,包括了 OGF 和 EGF ,甚至可能對 OGF 或 EGF 進行一個等價的變換,而後計算變換後的東西的多項式,而後再進行逆變換。

對於多項式連乘,能夠考慮分治 FFT 。對於多項式連乘,或者多項式連加,若是複雜度爆炸,那麼能夠考慮計算取對數 / 取指數後的值,而後再進行 exp 或 ln 。

(4)計算 exp 後的值,再取 ln 的這個問題的推廣

能夠解決天然數冪求和,給定 $n$ ,對 $t = 1, 2, 3, ..., 100000$ ,求

$$S_t(n)$$

然而並無什麼用,用伯努利數完虐。

而後我發現能夠進行一個加權,對序列 $A$ 的每一個位置,除了 $a_i$ 外,再定義一個 $c_i$ ,要求 $t = 1, 2, ..., 100000$ ,求

$$S_t(n) = \sum_{i = 1} ^ n c_i a_i ^ t$$

事實上這個加權的推廣是我從連乘的通常形式反推過來的,因此應該也不那麼容易找到其餘推廣了。

5、伯努利數

$$S(k, n) = \sum_{i = 0} ^ {n} i ^ k$$

考慮構建 $k$ 的指數生成函數,

$$F(x) = \sum_{k \ge 0} \sum_{i = 0} ^ n i ^ k \frac{x ^ k}{k!} = \sum_{i = 0} ^ n \sum_{k \ge 0} \frac{(ix) ^ k}{k!} = \sum_{i = 0} ^ n e ^ {ix} = \frac{e ^ {(n + 1) x} - 1}{e ^ x - 1}$$

下面的常數項沒有逆,是否是很 GG ?實際上並沒問題,由於上面的常數項也沒有逆,直接將分子、分母都除掉 $x$ ,而後就有逆了。

從整體上來看,求伯努利數只須要進行多項式乘法、多項式求逆;n ^ 2 暴力的話,那就暴力求逆、暴力乘。很是方便!

YAY 跟我講這玩意的時候,直接跟我講一個簡單的推廣,

$$S(k, n) = \sum_{i = 0} ^ n (ai + b) ^ k$$

5 月 25 日

1、NOI 模擬十九:jump

題意:有 $n = 10 ^ 5$ 個點,每一個點 $i$ 向 $[i - x_i, i + x_i]$ 連邊,定義兩點距

$$dis(i, j) = \min(i \to j, j \to i)$$

求 $\max dis(i, j)$ 。

怎麼想都不會作,,,以爲藥丸了。。。問題又轉化不了,只好開始想輔助問題。。。$n = 5000$ 怎麼作,考慮從每一個點 $x$ 拓展。。容易發現拓展的始終是一個區間。設當前的區間爲 $[l, r]$ ,那麼再走一步,就能夠走到區間 $[\min l_{l .. r}, \max r_{l .. r}]$ ,這樣就能夠不斷拓展,直到拓展滿,同時求出全部的 $x \to i$ 。。。拓展的始終是一個區間,這看起來頗有用。。。從新考慮一下 $maxdis$ 的意義,那麼就是最小的時間,知足對於任意的 $i < j$ ,都有 $r_i < j$ ,或 $l_j < i$ 。。。先考慮若是求得了 $l, r$ 數組,怎麼斷定是否知足要求?考慮對每一個 $i$ ,要求 $i < j$ 的 $j$ 都知足,首先 $[i, r_i]$ 之內能知足,因此對於 $j > r_i$ ,要知足 $l_j \le i$ ,因此判斷 $\max l_j \le i$ 是否成立。總之,就先求一個後綴和,而後能夠作到線性斷定。。。最小時間的話,考慮二分答案,那麼怎麼求某個時候的 $l, r$ ,那麼要倍增來算,那不如直接用倍增的方法來二分,複雜度就是 $O(n \log ^ 2 n)$ 了。。。

5 月 29 日

1、NOI 模擬(二十二):遊蕩計數

如何計算 $A ^ K$ ?求出 $A$ 的特徵多項式 $f(A)$ ,而後求出 $A ^ K = A ^ K \mod f(A)$ 。

$A ^ K \mod f(A)$ 考慮利用快速冪,場上不知怎麼腦抽了。。

5 月 31 日

最近好頹廢啊。。。差很少半個月的超低效率。。。要哭了QAQ。。。

1、Lydsy1805月賽:口算訓練

一個重要的條件是 $a_l \times ... \times a_r$ 是 $d$ 的倍數。對於倍數、因數、gcd 、lcm 之類的一些帶有數論風格的條件,要想到素數分解。設 $d = \prod p_i ^ {a_i}$ ,那麼 $a_l \times ... \times a_r$ 中每一個 $p_i$ 的個數大於等於 $a_i$ 就行了。

相似地,以前 51nod 上有一道題,要對多個數的 lcm 進行考察,進行素數分解以後,發現指數上呈 max(s1, s2, ..., sn) 的形式,而後在指數上進行 max-min 容斥,問題就變爲了一系列的 gcd 的乘積。

51nod 上還有一道,就是將 $\prod a_i!$ 從大到小貪心地分解成若干個階乘的乘積,考慮從大到小,輔助求出當前階乘的每一個素因子的個數,因此當前這個素數能夠取 min(TOT[p], HAS[p]) 個,而後再用個二項堆或者線段樹或者平衡樹維護一下。

2、Lydsy1805月賽:尋寶遊戲

找到並解決了一個相似的問題以後,包括找到了一個相關的定理並考慮完它的證實以後,這時候的思路要很是清晰:有兩種想法,一種是利用這個相似的問題的思路,一種是利用這個相似的問題的結論。

我太菜了,這道題直接想怎麼 DP 並不會,沒有交換 K 次這個條件以後,這就是一個經典的問題了,那麼要麼考慮在 DP 完以後的信息作一些調整,要麼考慮拓展這個 DP 的思路。我最初的想法是把 DP 完以後訪問到的位置弄出來,以及沒有訪問到的位置弄出來,而後兩者貪心交換,不幸地 WA 了,也沒有其餘的思路了。這時候只好考慮拓寬這個 DP 的思路,那麼就直接 i, j, k, l ,表示當前走到了 (i, j) ,k 個在路徑上的格子沒被選擇,l 個不在路徑上的格子被選擇。

再好比說,一個經典的問題——次短路。考慮利用最短路的結論,只可能改變最短路上的一條邊,因此試着刪去最短路上的一條邊,而後從新作一作最短路。即利用到告終論,又利用到了思路。

3、一點小技巧

(1)計算天然數冪求和模任意素數 $P$ :

$$F_m(n) = \sum_{i = 0} ^ n i ^ m \mod P$$

$$F_m(n) = \sum_i \sum_j {m \brace j} x ^ {\underline{j}} = \sum_j {m \brace j} \sum_i x ^ {\underline{j}} = \sum_j {m \brace j} \frac{n ^ {\underline{j+1}}}{j+1}$$

這時候能夠作任意模數,由於連續的 $j+1$ 個數中,必定能夠找到一個 $j+1$ 的倍數,直接把 $\frac{1}{j+1}$ 貢獻到那個 $j+1$ 的倍數,其他只須要預處理前綴積、後綴積。

(2)這時候我又想起了之前的一些問題,也能夠用這個小技巧去避免求逆元。

$$\sum_{i = 1} ^ n i$$

$$\sum_{i = 1} ^ n i ^ 2$$

其實均可以這樣處理,就能夠避免寫求逆元了(雖然求逆元只用一行。。。)。

4、Lydsy1805月賽:對稱數(一個數出現次數的奇偶性的相關問題)

「斷定是否存在一個數,知足XXX」 ,「斷定是否對於任意的數,知足XXX」 。看到這樣的存在與任意的斷定要比較敏感地想到——正難則反,兩者其實是能夠相互轉化的,並且每每能帶來許多新的意義。好比,如何判斷一個區間中存在一個數出現的奇數次——那就判斷一個區間中是否任意一個數都出現了偶數次,考慮給每一個數附上一個隨機值,斷定區間的異或和是否爲零就行了。

區間中任意一個數都出現了偶數次。。。我發現了兩種見解,直接對每一個點附上一個隨機值,或者考慮前綴和數組。本質同樣。

給定一棵樹,每一個點有一個權,多組詢問,求某條路徑上出現次數爲奇數的最小權。求兩個01數組異或以後的 highbit 。。考慮對位建線段樹,在線段樹上二分。。如何判斷一個區間是否每一個位置的異或值都爲 0 ,考慮給每一個位置附上一個隨機值 |A| ,那麼 |A xor B| = |A| xor |B| ,且全部爲 0 當且僅當 |A| = 0 。

這種問題出現好屢次了啊。。。whx 出過一次,wuvin 出過一次,月賽這一道,還有 uoj 192 。

5、最小生成樹相關

(1)Kruskal 算法的證實:最終的答案必定能夠經過增量構造。只須要證實每一次的增量均可以到達一個最優解。最初顯然。某次轉移的時候,以前已經有 w 條邊了,能夠到達 n-1 條邊的最優解 S ,以後有 w+1 條邊的狀態 T ,T 能夠不斷地添 S - T 中的邊,直到有 n-1 條邊,那麼 S 和最終的 T 只差一條邊,S 最優,且 T 的這條邊的邊權比 S 小,因此 T 也最優。

(2)一個問題:每一個點有點權,每條邊的邊權爲點權異或和,求最小生成樹。

把 Trie 建出來,必然優先和內部連,T0 和 T1 有且僅有一條邊,因此直接遍歷 T0 和 T1 中點數比較少的一部分,在另一部分上二分,時間複雜度爲 $O(n \log ^ 2 n)$ 。

6 月 1 日

1、Luogu T31154:可愛的隨機數

求 $n$ 個點的帶標號無向圖的連通塊個數的指望。

設 $f$ 連通,$g$ 任意,$F, G$ 爲指數生成函數,

$$n ! [x ^ n] \sum_{i} \frac{i F ^ i}{i!} = n ! [x ^ n] (F \times G)$$

這道題主要提供的是指數生成函數聯繫任意與聯通的見解,包括第一類 Stirling 列,第二類 Striling 列,Bell 數,以及一系列的連通圖計數。

相關文章
相關標籤/搜索