原创 【洛谷 P5357】 【模板】AC自動機(二次加強版)(AC自動機,差分)

每次匹配都不停跳fail顯然太慢了,於是在每個節點和fail指向的點連一條邊,構成一棵樹,在這棵樹上差分一下就好了。 AC自動機 就這個算法而言其實沒用想象中那麼難。 #include <cstdio> #include <queue> #

原创 【洛谷 P2444】 [POI2000]病毒(AC自動機)

題目鏈接 這麼多字符串,肯定是自動機啦。 先建出AC自動機,然後怎麼表示一個安全代碼沒有病毒代碼呢? 就是存在一條路徑不經過有病毒代碼段結尾的節點唄。 所以呢?有環啊!dfs一下救星了。 #include <cstdio> #include

原创 【洛谷 P4052】 [JSOI2007]文本生成器(AC自動機,DP)

題目鏈接 AC自動機上dp第一題嗷。 如果直接求可讀文本的數量,顯然要容斥,不好搞。 於是考慮求不可讀文本的數量,再用\(26^m\)減去其即可。 建出AC自動機,如果一個節點爲單詞結尾或其fail鏈中有節點爲單詞結尾,那麼這個點就不能走,

原创 【洛谷 P1659】 [國家集訓隊]拉拉隊排練(manacher)

題目鏈接 馬拉車+簡單膜你 #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int MAXN = 11000010;

原创 【洛谷 P3224】 [HNOI2012]永無鄉(Splay,啓發式合併)

題目鏈接 啓發式合併就是暴力合併把小的合併到大的裏,一個一個插進去。 並查集維護連通性,同時保證並查集的根就是所在Splay的根,這樣能省去很多操作。 #include <cstdio> #include <algorithm> using

原创 HNOI2019退役祭

對你沒看錯,是退役祭。 佔坑。

原创 【洛谷 P2865】 [USACO06NOV]路障Roadblocks(最短路)

題目鏈接 次短路模板題。 對每個點記錄最短路和嚴格次短路,然後就是維護次值的方法了。 和這題一樣。 #include <cstdio> #include <queue> #include <cstring> using namespace

原创 【洛谷 P3168】 [CQOI2015]任務查詢系統(主席樹)

題目鏈接 被自己的sb錯誤調到自閉。。 主席樹的進階應用。 把\(P_i\)離散化一下,得到每個\(P_i\)的排名,然後建一棵維護\(m\)個位置的主席樹,每個結點記錄區間總和和正在進行的任務數。 差分一下,主席樹維護前綴和,每個時刻一個

原创 【CF343D】 Water Tree(樹鏈剖分)

題目鏈接 樹剖傻逼題,練練手好久沒寫樹剖了。 查詢忘記\(pushdown\)抓了好久蟲。。 全文手寫,一遍過。。。 #include <cstdio> const int MAXN = 500010; inline int read(){

原创 【洛谷 P2604】 [ZJOI2010]網絡擴容(最大流,費用流)

題目鏈接 第一問就是簡單的最大流。 第二問,保留第一問求完最大流的殘量網絡。 然後新建一個源點,向原源點連一條流量爲k,費用爲0的邊。 然後所有邊重新連一起(原來的邊保留),費用爲題目所給,最小費用即爲第二問答案,很好理解。 #includ

原创 【洛谷 P4542】 [ZJOI2011]營救皮卡丘(費用流)

題目鏈接 用最多經過\(k\)條經過\(0\)的路徑覆蓋所有點。 定義\(ds[i][j]\)表示從\(i\)到\(j\)不經過大於\(max(i,j)\)的點的最短路,顯然可以用弗洛伊德求。 然後每個點拆成入出點,連邊 源點向\(0\)的

原创 【洛谷 P4016】 負載平衡問題(費用流)

題目鏈接 環形均分紙牌,既然是網絡流23題的那就用網絡流做把。 套路拆點。 供需平衡。 源點向大於平均數的點的入點連流量爲這個數減去平均數的差,費用爲0的邊,表示需要移走這麼多。 小於平均數的點的出點向匯點連流量爲平均數減去這個數的差,費用

原创 【洛谷 P3191】 [HNOI2007]緊急疏散EVACUATE(二分答案,最大流)

題目鏈接 sb錯誤調了3hour+。。 bfs預處理出每個\(.\)到每個\(D\)的最短距離。 二分時間\(t\),把每個\(D\)拆成\(t\)個點,這\(t\)個點兩兩連邊,流量\(INF\)表示\(t\)個時刻都可以從這個\(D\)

原创 【洛谷 P2512】 [HAOI2008]糖果傳遞(貪心)

題目鏈接 環形均分紙牌。 設平均數爲\(ave\),\(g[i]=a[i]-ave\),\(s[i]=\sum_{j=1}^ig[i]\)。 設\(s\)的中位數爲\(s[k]\),則答案爲\(\sum |s[i]-s[k]|\) 博主太菜

原创 【洛谷 P2764】 最小路徑覆蓋問題(最大流)

題目鏈接 首先有\(n\)條路徑,每條路徑就是一個點,然後儘量合併,答案就是點數-合併數。 套路拆點,源連入,出連匯,原有的邊入出連。 最大流就是最大合併數,第一問解決。 然後怎麼輸出方案? 我是找到所有路徑中的最後一個點,然後根據殘量網絡