原创 bzoj 1717 [USACO06DEC] Milk Patterns (後綴數組+二分)

題目大意:求可重疊的相同子串數量至少是K的子串最長長度   洛谷傳送門 依然是後綴數組+二分,先用後綴數組處理出height 每次二分出一個長度x,然後去驗證,在排序的後綴串集合裏,有沒有連續數量多於K個串的長度>=x, 但據說有一種高端

原创 bzoj 2754 [SCOI2012]喵星球上的點名 (AC自動機+map維護Trie樹)

題目大意:略 由於字符集大,要用map維護Trie樹 並不能用AC自動機的Trie圖優化,不然內存會炸 所以我用AC自動機暴跳fail水過的 顯然根據喵星人建AC自動機是不行的,所以要根據問題建 然而這題有一些很艮的地方: 1.如果一個喵

原创 NOI 2011 阿狸的打字機 (AC自動機+dfs序+樹狀數組)

題目大意:略(太長了不好描述) 良心LOJ傳送門 先對所有被打印的字符串建一顆Trie樹 觀察數據範圍,並不能每次打印都從頭到尾暴力建樹,而是每遍歷到一個字符就在Trie上插入這個字符,然後記錄每次打印後字符串最後一個字符在Trie樹上的

原创 NOI 2015 壽司晚宴 (狀壓DP+分組揹包)

題目大意:兩個人從2~n中隨意取幾個數(不取也算作一種方案),被一個人取過的數不能被另一個人再取。兩個人合法的取法是,其中一個人取的任何數必須與另一個人取的每一個數都互質,求所有合法的方案數 (數據範圍畢竟很小,乍一看也不是啥打表找規律的

原创 NOI 2018 歸程 (Kruskal重構樹)

題目大意:太長了,略 Kruskal重構樹,很神奇的一個算法吧 如果兩個並查集被某種條件合併,那麼這個條件作爲一個新的節點連接兩個並查集 那麼在接下來的提問中,如果某個點合法,它的所有子節點也都合法,即子節點的限制少於父節點 #incl

原创 模板 NTT 快速數論變換

NTT裸模板,沒什麼好解釋的 這種高深算法其實也沒那麼必要知道原理 #include <cstdio> #include <cstring> #include <algorithm> #define N (1<<17)+10 #defi

原创 模板 FFT 快速傅里葉變換

FFT模板,原理不難,優質講解很多,但證明很難看太不懂 這模板題在bzoj竟然是土豪題,服了 #include <cmath> #include <cstdio> #include <cstring> #include <algorit

原创 bzoj 2049 [SDOI2008]洞穴勘測 (LCT)

題目大意:維護一個森林,支持邊的斷,連,以及查詢連通性 LCT裸題 1A了,給自己鼓鼓掌 #include <cstdio> #include <algorithm> #include <cstring> #define il inli

原创 bzoj 4530 [BJOI2014]大融合 (LCT)

題目大意:給你一棵樹,樹的邊是一條一條連上去的 洛谷P4219傳送門 LOJ#2230傳送門 在連邊的過程中詢問某條邊的“負載”,即能通過這條邊的所有不同的路徑的數量 LCT動態維護當前節點的子樹大小 size記錄該節點的虛子樹的大小之和

原创 Link Cut Tree 動態樹 小結

動態樹有些類似 樹鏈剖分+並查集 的思想,是用splay維護的 lct的根是動態的,"輕重鏈"也是動態的,所以並沒有真正的輕重鏈 動態樹的操作核心是把你要把 修改/詢問/... 等等一系列的操作的樹鏈放到一個splay裏,然後用splay

原创 bzoj 3282 Link Cut Tree (LCT)

題目大意:維護一個森林,支持邊的斷,連,修改某個點的權值,求樹鏈所有點點權的異或和 洛谷P3690傳送門 搞了一個下午終於明白了LCT的原理 #include <cstdio> #include <algorithm> #include

原创 bzoj 2631 [國家集訓隊]Tree II (LCT)

題目大意:給你一棵樹,讓你維護一個數據結構,支持 邊的斷,連 樹鏈上所有點點權加上某個值 樹鏈上所有點點權乘上某個值 求樹鏈所有點點權和   (辣雞bzoj又是土豪題,洛谷P1501傳送門) LCT裸題,下傳標記,搞法類似於洛谷線段樹模板

原创 bzoj 3510 首都 (LCT)

題目大意:給你一顆樹,邊是一條一條連上去的 在連接過程中會存在詢問,詢問當前節點所在聯通塊(其實是一顆樹)的重心是哪個節點 以及森林中所有樹的重心的異或和 在做這道題之前,要先了解樹的重心的一個性質: 兩棵樹合併時,新樹的重心在合併後,原

原创 bzoj 3786 星系探索 (splay+dfs序)

題目大意:給你一棵樹,支持一下三種操作 1.獲取某節點到根節點的路徑上所有節點的權值和 2.更換某棵子樹的父親 3.某子樹內所有節點的權值都增加一個值w 當時想到了splay維護dfs序,查完題解發現思路是對的,然後我就寫了足足6個小時才

原创 bzoj 4518 [Sdoi2016]征途 (斜率優化DP)

我犯了sb錯誤然後調了1個小時......隊列寫錯了 斜率k遞增,b取最小值,隊列維護凸包即可 f[0]的預處理好像有些奇怪???我把inf調大就過了??? #include <cstdio> #include <algorithm>