1
給定一棵樹,每次可以選一個葉子刪掉。同時有 個限制 表示 必須在 之前刪掉。求可能最後一個被刪掉的點的集合。
如果有一個 的限制,那麼以 爲根 的子樹都不能選。之後把不能選的點之間定向,加上限制的邊,如果有環就無解,否則可以證明解就是剩下的點。
2
給定一個字符串集合,求字符集大小爲 且不包含任何一個集合中串的“雙向無限”字符串個數。如果有無限個輸出 -1。
構建出字符串和字符集的 AC 自動機。判斷 inf:
1.某個 scc 不是簡單環;
2.某條路徑經過三個不同 scc。
否則,一條合法的路徑一定是從一個環出發,走一些路徑,再到一個環。
3
有一個 的 矩陣 ,和一個 的矩陣 ,滿足
給你矩陣 ,請給出一個滿足條件的矩陣 。
添加輔助變量,每四個格子添加輔助變量表示哪些等於 ???
發現確定了第一行第一列和 之後,每個格子都可以由一坨 元素和兩個 元素(該行第一個和該列第一個)算出。然後就是 2-sat 模型了。
田字格限制問題一般想一想確定了哪些東西以後解就是固定的了。
4
一棵樹 對點,每次可以花費 的代價給一條邊標記或者給一對點標記。滿足每對未標記點的路徑上的所有邊都被標記。
要麼點對被覆蓋,要麼之間所有邊被覆蓋。建二分圖,左邊是點對,右邊是邊,每個點對向它們之間所有的邊。求最小割即可。向樹上的一條路徑連邊,可以倍增或者樹剖優化。
5
給定一個由單位正方體組成的物體的俯視圖,求最多拿掉多少正方體使得三視圖不變。
首先滿足俯視圖。即俯視圖不爲零的都鋪上一層。
答案的上界顯然是每列最大值之和+每行最大值之和。什麼時候答案會減小?就是行行和列公用最大值的時候。因此建立二分圖,左邊是行,右邊是列,如果某行某列最大值相同並且這個格子可以放東西,就連流量 1 費用 最大值的邊。跑最大費用流即可。
進一步觀察發現權值相同的點纔會聯通,因此把權值相同的點拿出來跑最大流即可。
輸贏分配問題
區間 覆蓋問題
有一些區間,選擇一個區間會產生一些收益。每個點覆蓋它的區間最多不超過 個。
對於一個區間 ,我們連邊 ,流量 ,費用 。求流量爲 的最大費用流
答案的上界顯然是不對移動進行限制的匹配。
考慮去調整匹配(變得合法)。如果匹配中士兵移動以後炸掉一個炮樓,然而不合法,那麼他不移動的時候一定也可以炸掉一個炮樓。我們對他的匹配進行調整,匹配數不變。
非常有趣的調整。證明了上界總是可以達到的。
這一類網絡流問題總是先去考慮答案的上界,然後用最小割/最大流來調整,或是直接證明了上界可以達到。
雜談
邊權小的時候用桶代替dij的堆。
k短路 可並堆
多sat(每個變量出現兩次,一正一反)。包含a的子句和-a的子句連無相邊 cf
完全圖最小生成樹:曼哈頓最小生成樹:把平面分成八個方向,向每個方向曼哈頓最近的點連邊。每個區域有兩條限制,比如x>=x0,(y-y0)-(x-x0)>=0,一維排序掃描線,另一維按區域維護x+y最小值即可。
編號gcd:只有向他的倍數的點的連邊纔有用。
xor:boruvka?
最小生成環套樹。直接kruskal。正確性:未選擇的邊一定不在答案內。
次小生成樹:枚舉非樹邊,刪掉路徑最大邊。
給定每個點的度數,構造滿足條件的圖或樹
1.要求沒有重邊:
每次選一個度最大的點,假設度數爲 ,和度數前 大的點連邊。
2.不要求:
充要條件是最大點度數小於等於總度數的一半並且總度數爲偶數。構造方法是每次選擇兩個度最大的點連邊。
3.不要求沒有重邊要求聯通。
樹:
合法當且僅當和爲 ,且每個點至少是 。
使用 prufer 序列,先提出葉子,和度數最大的點連邊。維護兩個集合,一個是葉子一個是非葉子。
prufer 序列:找到編號最小的葉子刪掉,把鄰接點放到序列裏。直到剩兩個點。每個點出現次數是 次。
線性代數黑科技:
無向圖的 dfs 樹上給每個非樹邊分配一個隨機整數權值,樹邊權值等於覆蓋他的非樹邊權值的異或,一組邊集是割集當且僅當對應權值線性相關。
割集只刪掉這組邊以後聯通塊數量增加了。線性相關指存在一個子集異或爲 。
dzyloves chinese。
支配樹
DAG 上的做法較簡單,一個點的支配點就是入邊支配點的 Lca。