亂聽課記錄
關於樹的分治問題&雜題選講 張哲宇
邊分治
(邊分不是很雞肋嗎)
例題一
題目大意:給出兩顆有正負邊權的樹,求出兩個點\(u,v\)使得兩棵樹中\((u,v)\)距離的和最大。\(n \le 10^5\).
點分治
例題二
題目大意:\(n\)個點的樹,每個點有非負點權,求權值第\(k\)大的聯通塊。\(n,k \le 10^5\).
考慮點分治,對於每一個分治中心,進行的點分相當於多了一個“強制選該分治中心”的限制。
對於每一層的分治,我們dfs重標號,那么對於第\(i\)個點有兩種決策:選點\(i\),那就繼續考慮dfs序為\(i+1\)點的決策;不選點\(i\),則跳到dfs序為\(i\)子樹的后一個點。如上的轉化相當於把一個連通塊轉化成了一條路徑,因此第\(k\)大連通塊問題就變成了經典\(k\)短路問題(但是並不清楚在每層分治都做這個\(k\)短路的復雜度是怎樣的)
例題三(例題一)
題目大意:參見例題一
突然,掉線。
聽說點分做法“實質上”就是邊分。
例題四
題目大意:給出\(n\)個點的有根樹,每個節點上有一個一次多項式,求每個節點到根的多項式乘積的和。\(n \le 10^5\).
大致就是在一層層的點分中心上跳,感覺可能類似codechef Yet Another Tree Problem
全局平衡二叉樹
zzy的全局平衡二叉樹講跟沒講一個樣。
還是去看tls寫的吧基於變換合並的樹上動態DP的鏈分治算法和全局平衡二叉樹學習筆記
例題五(例題四)
(這個用全局平衡二叉樹怎么做?)
All Last
題目大意:給出一顆\(n\)個點的有根樹,\(q\)次詢問距離點\(p\)距離\(\le d\)且不在路徑\(u-v\)上的點權\(\max\).\(n,q \le 10^5\).
例題六
題目大意:一顆有根樹,每個節點有二維坐標\((x,y)\)。動態加入一個葉子\(v\),並詢問\(v\)到根路徑上,與\(v\)的\(dis \in [l,r]\)的所有節點形成的凸包與斜率為\(k\)的直線的切點。
怎么突然放b站鬼畜了???計算鴨海星
推銷Marp
FJWC2019選講
雜題一
題目大意:要求\(O(1)\)回答是否存在\(n\)個點允許有重邊不能有自環且弱連通的流網絡,滿足流量平衡且流量為\(1\)的邊有\(a\)條,流量為\(2\)的邊有\(b\)條,不存在其他流量的邊。\(n \ge 2\).
標算:分類討論
雜題二
打表題,zzy直接跳了。
雜題三
題目大意:初始有一個根,強制在線加葉子,要求每次加葉子之后輸出當前樹的權值。定義一顆樹的權值為交換兩顆互不為祖先的子樹后的最大直徑。\(n \le 5\times10^5\).
mine:處理根的子樹深度最大、次大、第三大的深度,每次把第三大的子樹嫁接給次大的最后一個節點。
上面這個做法有點小問題,因為嫁接的第三大子樹不一定要是根的直接子樹,所以選擇的應當是一個“三叉戟”的形態,使得選取的邊數最多。
雜題四
題目大意:構造一個恰有\(k\)條直徑的邊權非負的樹,使用點數\(\le 5000\),\(k\le 5000000\).
先從若干個菊花相接的情形開始考慮。
雜題五
題目大意:有一顆\(n\)個點的樹,每次可以刪除一個度數在\([L,R]\)之間的點然后得到\(a_i\)的貢獻,要求最大化貢獻之和。
dp
雜題六
有\(10^4\)個棧,棧頂元素是\(s_i\),要求和spj玩游戲:選手每次選擇一個數\(x\),spj返回一個操作$\le / \ge \(,並把所有滿足\)s_i \text{ opt } x\(的棧頂元素彈出並返回新的\)s_i$。要求在\(50\)次內清空所有棧。
一種顯然的想法是每次取中位數,但是這個做法非常容易卡。問題出在剩余元素不同的棧應當賦不同的優先值。
(然后我也不知道怎么就)對於大小為\(x\)的棧構造指數權函數\(w(x)=p^x\),操作次數近似\(\frac{\ln(n\times p^k)}{\ln \frac{2p}{p+1}}\)。取\(p=4\)時最大操作次數為\(49\).
雜題七
題目來源:#2392. 「JOISC 2017 Day 1」煙花棒
這個題去年講過的呀,怎么又搬出來講……
等等我怎么還沒做掉。
雜題八
題目大意:\(n\)個點,\(m\)條邊的無向圖,每個點有權值\(a_i\),求一條\(1\)到\(n\)的路徑,最小化路徑權值從大到小排序后的字典序。\(n \le 10^5,m \le 5\times 10^5\).
排序之后字典序最小相當於比較權值的桶的字典序大小。
雜題九
(zzy說題目有點難。於是看完題直接跳了)
雜題十
題目大意:給定一個點仙人掌,邊權為\(1\),求最短路長度為\(i\)的點對個數。
樹的情況應該是個經典點分FFT問題。
這里是縮點點分;然后對於點分中心為環的情況,再分治處理?
1/2雜題選講 高嘉煊Samjia
Incremental Double Free Strings
題目大意:給出整數\(n\)滿足\(1\le n\le 26\),定義一個長度為\(n(n+1)\over 2\)的字符串是合法的,當且僅當滿足以下三個條件:
-
所有字符都是小寫字符
-
不存在兩個相鄰相同字符
-
對\(i=1\cdots n\),總存在一個字符\(c\)在串中出現了\(i\)次
給出\(n,k\),求所有合法字符串中字典序第\(k\)小的。\(k \le 10^{18}\).
CHEFKC
題目大意:求帶權有向圖的第\(k\)小割。\(n \le 77,m,k\le 777\)
題目來源:Chef and Cut
依舊是k短路題,考慮一個狀態\((i,p[])\)表示考慮前\(i\)個數,每個數在\(S\)集合內或\(T\)集合內的割大小。那么從初始狀態\((0,[])\)開始拓展。
好像有一種比講課人更優的做法。
以上這個做法每次拓展的步長為1,那么不僅時間效率低,空間開銷也有相當多是不必要的。
考慮從每一個完整狀態開始A*。首先不做任何限制,僅僅跑一趟最小割,然后以這個最小割的狀態作為初始狀態。對於每一次對最優狀態\(\text{ sta }\)轉移調整到\(\text{ nxt }\),枚舉一個\(len\)表示\(\text{ nxt }\)前\(len\)位完全固定,然后從\(\text{ sta }\)中繼承前\(len-1\)位並將\(len\)取反。這個轉移是為了確保不重不漏,且按照權值順序經過所有狀態。
這可能是算是一個A*的處理技巧吧,但是不一定通用。有些時候從完整狀態為保證按權值順序經過所有狀態可能比較困難。
這里是寫的題解:【A* 網絡流】codechef Chef and Cut
Spoonerisms
題目大意:給出\(n\)個字符串,要求選出其中四個記為\(A,B,C,D\),使得存在非空的字符串\(p,q,r,s\)滿足\(A=pq,B=rs,C=rq,D=ps\),其中\(r\not= p,q\not= s\)。\(\sum |S | \le 500000\).
(聽說標算鍋了?然后zzq神仙提供了\(O(n\sqrt n)\)的“標算”)
問題轉為求四元環,但是復雜度是\(O(n\sqrt n)\)的。
cf1146H Satanic Panic
題目來源:H. Satanic Panic
dp+計算幾何
Chopping hands
水題選講 鍾子謙
Complete The Graph
題目來源:cf Round #372 1b 加強
題目大意:有一張\(n\)個點\(m\)條邊的簡單正權無向圖,\(S\)到\(T\)的最短路為\(L\),現在有一些邊的邊權未知,請輸出任意一種方案。\(n,m\le 500000\).
對於每一條邊權未定的邊,把它的邊權先設為1。然后考慮首先處理出\(dist_i\)表示在如上初始化的情況下,\(T\)到\(i\)的最短路距離。之后再從\(S\)開始做dij,設\(S\)到\(u\)的最短路為\(len_i\),那么當前若以\(u\)增廣一條邊權未定的邊\((u,v)\),就將其邊權設為\(\max\{1,L-len_u-dist_v\}\)。以上構造能夠保證問題的完全轉化。
更詳細的可以看我題解【圖論 思維】cf715B. Complete The Graph加強
One Third
題目來源:AGC032F
喂鴿子
題目來源:集訓隊作業2019加強
題目大意:有\(n\)只鴿子,每次等概率選取一只鴿子喂一粒玉米。每一只鴿子只有喂了\(k\)粒玉米才會飽。問\(n\)只鴿子都被喂飽的期望步數。
感覺好經典啊。然而不會
Mergesort Strikes Back
題目來源:Avito Cool Challenge 2018 cf1081G. Mergesort Strikes Back
Traffic Blights WF2019
題目來源:ICPC World Final 2019
Mouse
題目來源:Info(1) Cup 2019
題目大意:交互庫有一個\(1,2,\cdots n\)的排列\({p_i}\),每次可以詢問一個排列\({q_n}\),交互庫會返回相同的位置個數。要求還原\({p_n}\).\(n \le 256\),詢問次數\(\le 2400\).
考慮首先隨機一個完全不同於原排列的排列\(p_i\),再從這個排列開始“試探”。
不清楚復雜度證明。
Keep clicking,keep flipping
題目來源:IPSC2011
考慮貪心並證明。
構造題選講 楊帆
cf720c
題目大意:有一個\(n\times m\)的網格,求構造一個四連通塊(每個格子通過四個方向的邊連通),使其中大小為3的\(L\)形(可旋轉)數目恰好為\(k\),\(n\times m \le 10^5\)。
mine:考慮矩形\(a\times b\),那么有\(4(a-1)(b-1)\)個合法的\(L\)形。我們找一個合法\(L\)形數量接近\(k\)的矩形:對於一個角元素,它有3的貢獻;對於一個邊元素,它有6的貢獻,這樣就解決了模4下的0,1,2,3的合法性。
cf453c
cf819e
題目大意:一張\(n\)個點的完全圖,要求找到若干個三、四元環,覆蓋每條邊恰好\(2\)次。\(n\le 300\)
分奇偶討論,考慮從\(n=3\)和\(n=4\)的情形加點。
cf933e
題目大意:有一個長度為\(n\)的序列,每次可以選擇相鄰兩個數\(a,b\)將其同時減去\(\max\{a,b\}\).求操作到無法操作的最小代價。\(n \le 10^5\)
構造一個\(b_i\)表示\(i\)這個位置減去的代價。思維構造題。
cf317e
題目大意:有一無窮大的網格圖,還有點\(A,B\)和一些障礙。每次可以選擇一個方向,對於\(A,B\)如果該方向沒有障礙則向這個方向移動一步。目標是使\(A,B\)重合,要求步數\(\le 10^6\).障礙不超過\(400\)個,坐標絕對值\(\le 100\)。
首先考慮障礙為1的情況,則將\(A\)靠在障礙上,再將\(B\)移到和\(A\)的同一直線上,接下去再將\(A,B\)靠攏即可。
mine:如果\(A,B\)不連通則無解;如果\(A,B\)都與無窮遠處連通,那么就把\(A,B\)都移出來,再用邊界障礙做障礙=1的情形;如果\(A,B\)被封閉在一個障礙塊里,那么因為障礙塊的最大面積是\(100\times 100\),就隨機\(10^4\)次,每次走\(10^2\)步。
std:找到\(A\)與\(B\)的最短路,並將\(A\)沿着這條路徑移動。如果\(A,B\)之間的距離縮短那么重復這個過程。當不能操作時,那么就找一個邊界上的障礙來做障礙=1的情況即可。
cf gym 100162e
好像是大力分類討論?
cf804e
(怎么跳了啊)
cf1053e
雜題選講 毛一琛
序列
題目大意:長度為\(n\)的序列\(A\),求長度為\(n\)的排列\(B\)滿足\(\min \{|A_{B_i}-A_{B_{i-1}}|\}\)最大,\(n \le 10^5,A_i \le 10^9\)
當\(n\)為偶數時,有上界\(\min\limits _{i=1}^{n\over 2}\{a_{i+{n\over 2}}-a_i\}\)。
買置換
題目來源:2014集訓隊互測
(bzoj怎么沒數據啊)
打怪獸
貪心&dp&結論
BBQ加強
題目來源:AGC001E加強
考慮組合數意義,相當於是一個矩形的兩個對點路徑的方案數。
注意到這里所求的組合數意義的路徑必定經過直線\(y=-x\),那么就\(f[i][j]\)表示第三象限所有點走到
Rational-Sums
題目來源:hackerrank Ad Infinitum18
這是推式子的數學題吧。
似乎還要一些觀察和多項式的性質。
Permanent
題目來源:cf468e
構造二分圖。(接下去沒懂)
Addition without carry
二進制給出長度為\(n\)的數組\(a\),求一個長度同樣為\(n\)的數組\(b\)滿足:
- \(b_i \ge a_i\)
- \(b_1|b_2|\cdots b_n=\sum b_i\)
要求最小化\(\sum b_i\),\(n \le 3\times 10^5,\sum|a_i| \le 3\times 10^5,\max\{|a_i|\} \le 3\times 10^5\).
題目來源:cf gym102154a
第二條件等價於\(b_i\)上的1互不重疊。
考慮如何暴力:貪心地從高到低位確定\(b_i\),首先假設若第\(i\)位為0,那么使\(1\cdots i-1\)位為1檢查是否合法。
有趣的游戲
題目來源:51nod 1599
湊數題
題目大意:有一個\(n\)個點的競賽圖,其中\(k\)條邊的方向已經確定,剩下邊的方向等概率隨機。求最小環的期望個數。\(n \le 5000\).
最小環一定是三元環。\(O(n^2)\).
座位空了好多
水題選講 不知名大爺
Rikka with an unnamed temple
Square Subsequences
題目大意:給定長度為\(n\)的字符串\(S\),求最長的"平方子序列"(一個字符串被稱為"平方串"是它可以被表示為\(AA\)的形式)。\(|S|\le 3000\).
枚舉一個斷點\(len\),求\(S(1\cdots len)\)和\(S(len+1\cdots |S|)\)的最長公共子序列的長度。
然后標算是把求最長公共子序列的dp給壓位,復雜度\(O({n^3\over{6w}})\)……
Forests Fires
題目來源:cf1086f
芒果冰加了空氣
題目來源:北大集訓d1t3
題目大意:給出一顆\(n\)個點的樹,每次點分隨機選取連通塊內一個點作為下一層點分中心。求帶標號點分樹種類數。
mine:首先會自然想到一種naive的遞歸子問題划分,但是容易發現
\(f[i][j]\)表示對\(i\)的子樹點分,並且\(i\)在點分樹中的深度為\(j\)的方案數。
\(f'[x][i]=\sum_{j=1}^i\sum_{k=i-j}^{size[y]} f[x][j]*f[y][k]* {i-1\choose j-1}\)
tree
題目大意:給出\(n\)個點的樹,每條邊有\(int\)范圍內的邊權,\(q\)次修改更改路徑\((u,v)\)上的邊權為\(w\),並詢問離\(1\)最遠的點的距離。
動態點分?全局平衡二叉樹?
Rikka with Data Structures
題目大意:要求維護操作
- 區間加
- 區間賦值
- 區間詢問\([L,R]\)內以\(x\)為左端點,最大值在左/右端點的區間個數。
類似樓房重建。
Epic Convolution
題目來源:cf1054h
二維fft
Diameter
題目大意:求\(n\)個點有標號直徑為\(0,\cdots n-1\)的無根樹方案數。\(n \le 500\).
很類似烷烴計數啊。
problem
題目大意:求\(n!\text{ mod } p\),\(0 \le n < p \le 10^{12}\)。
problem2
題目大意:自然數倒數和。\(n\le 10^{12}\).
problem3
組合數 行求和。
Cutting Squares
題目來源:PE270
先dp跑出較小解,再觀察發現性質。
powerful number 在求積性函數前綴和中的應用
powerful number:每一個質因數的次數都大於等於2的數。
求積性函數前綴:\(\sum f(i)\),如果存在積性函數\(g(i)\)滿足對於任意質數\(p\)有\(f(p)=g(p)\),那么(據說)可以利用powerful number的性質快速求\(\sum f(i)\).
並沒有理解。