原创 codeforces/1312E(區間dp)

題目 這道題不管從內容還是數據範圍看起來都像是區間dp,可一時想不出來怎麼構造出一個滿足無後效性的區間狀態,看了一眼題解才頓悟。 分兩步走,第一步我們求出所有的dp[l][r],表示[l,r]區間可以最終轉化爲的一個數,如果無法轉化則爲零

原创 HDU6230-Palindrome

題目連接 題目大意:定義一種 one−and−halfone-and-halfone−and−half 迴文串,其長度爲 3n−23n-23n−2 ,滿足 s[i]=s[2n−i]=s[2n−2+i],1≤i≤ns[i]=s[2n

原创 樹上啓發式合併(dsu on tree)一篇就會!理解其他博客的基礎

這個算法真是研究了好久才明白……衆多博客真的不是面向小白的 模板拿cf600E舉例子,問題是給一棵有根樹(rt==1),每個節點有一個顏色值,樹的節點數和顏色值的範圍都是1e5。對於每個節點我們定義其子樹中數量最多的那個顏色值爲主顏色(可

原创 上下界網絡流 cf704D

cf704D 給棋盤上n個棋子染色,紅黑兩種,代價不同,有m個約束,要求某一行或某一列的紅黑棋子數差不能超過某一數值。求最小代價的染色方案。 上下界網絡流的思路就是分別減去最低流量,剩餘的放在圖中跑最大流,對於原有大於零下界的邊就通過新建

原创 基礎向:如何輸出一棵漂漂亮亮的樹

在搞編譯原理實驗的時候,最後要求輸出一棵漂漂亮亮的語法樹,便突然想起了二叉樹輸出這個在初學編程時困擾過我的問題,索性就在這裏把它解決了吧。 ps:對於只是想明白怎麼輸出樹的同學,博客中編譯原理相關的知識可以自行跳過。 先來看看最終效果

原创 牛客多校graph games(部分分塊+哈希)

https://ac.nowcoder.com/acm/contest/883/A 題目大意,給出一個無向圖,設S(x)表示x的臨近點集合,臨近點即通過一條邊直接相連的點。有兩種操作,1是把邊集合(讀入順序)從l到r的邊狀態反轉(相連變斷

原创 網絡流&dij模板題HDU6582

題目給出一個有向圖,要求阻擋其中的一些邊,使得從1到n的最短路徑變長,阻擋一條邊的代價是這條邊的長度。 問題其實就轉化爲,找到從1到n的所有最短路,並在這些路中找到能阻擋最短路的一些邊且邊權和最小——也就是找到最短路構成圖的最小割。 找

原创 雙哈希

和自然溢出法不同的是,這種方法需要取模,並且是兩套base mod。每次做哈希操作時,需要兩套哈希值都一致,這就大大降低了衝突概率。但是據說常數比較大,並且寫起來麻煩一些。 CF1320D 對於一個01串(2e5),給出兩種操作:110

原创 假日賽boss

https://ac.nowcoder.com/acm/contest/4862/E 給n(<=20)頭牛,每頭牛有自己的身高、重量、承重,要讓它們疊羅漢並高度至少是h,並要求剩餘的載重量最大(說明最穩),求這個最大剩餘載重量。 這題初

原创 長鏈剖分優化樹上dp

長鏈剖分可以把維護子樹中只與深度有關的信息做到線性的時間複雜度。 例題cf1009f 給一棵樹,定義每個點的dom值爲,以該點爲根的子樹重中,節點數最多的那一層的層數,即那一層距離這個根節點有幾條邊,如果多層節點數相同,取最小的層數。例

原创 字符串模板(後綴數組、後綴自動機、迴文樹)

再整理一遍板子 後綴數組例題cf432D:問對字符串s,對於所有的前綴,當它等於同長度後綴時,這個子串一共在s中出現多少次。 後綴數組求lcp是logn,顯然直接二分即可。複雜度nlogn 1 2 3 4 5 6 7 8 9 10 11

原创 時間分治

cdq分治,也叫時間分治,核心概念就是對於若干個操作和查詢,維護每次操作在哪個時間段中有效。 https://ac.nowcoder.com/acm/contest/888/E?&headNav=acm 這道題中的size就是時間,我們

原创 樹上啓發式合併模板

這個算法真是研究了好久才明白……衆多博客真的不是面向小白的 模板拿cf600E舉例子,問題是給一棵有根樹(rt==1),每個節點有一個顏色值,樹的節點數和顏色值的範圍都是1e5。對於每個節點我們定義其子樹中數量最多的那個顏色值爲主顏色(

原创 思維:線段樹dp

https://ac.nowcoder.com/acm/contest/881/I 不得不說這題是真的難,看題解都差點沒用理解。) 給定平面上若干(1e5)點,每個點ab兩個權值,要求將其分爲兩組,a組的a權值和加b組的b權值和最大,劃

原创 構造算法題目積累

cf1304D題目給出n-1個‘<’‘>’約束,第i個位置的<意味着結果串中a[i]<a[i+1],要求用1~n個數構造出兩個串,分別擁有最小和最大的LIS。 思路:我們將升序1~n中連續>的區間執行reverse操作,執行完畢後的結果