原创 拓展kmp(2020新年第一篇博客 學無止境衝啊)

拓展kmp算法可解決以下問題,給定兩個字符串s1和s2,可以求出s1的extend數組(簡記爲ex),其中extend[i]表示s1從第i位開始的子串和s2的最大公共前綴長度,舉個例子:可以看到extend[0]=4最長公共前綴是

原创 Codeforces Round #638 (Div. 2)

B題 很容易可以判斷出最終的結果肯定是某個長度爲k的字串不停地循環,問題關鍵在於如何確定這個子串,即怎麼在原序列中找一個長度爲k的子序列。任意一個長度爲k的子序列肯定不行,因爲如果原序列中存在不在這個子序列中的其他數,那麼就無法表

原创 「LibreOJ β Round #2」貪心只能過樣例(bitset,暴力)

題目 今天在看bitset的是時候看到了這道題,暴力寫了一下果不其然T了,後來發現我的暴力實在太暴力了,適當剪枝後,我們枚舉的對於每個x[i],我們取值是a[i]到b[i],當前能夠到達的狀態必須是前一輪能得到的狀態,每增加一種數

原创 樹鏈剖分

參考(還有圖,講的明白!) 樹鏈剖分:即把樹分成多條鏈來進行所需要的操作,比較常見的的是重鏈剖分。先介紹部分概念 重兒子:一個節點的所有兒子中子樹最大的那個兒子 輕兒子:除了重兒子之外的兒子 重邊:連接重兒子的邊稱爲重邊 輕邊:連

原创 最大流(模板EK,dinic,sap,未優化)

模板題 這三種算法基於尋找增廣路徑來求解最大流,當一個網絡圖中不存在增廣路徑時我們就得到了最大流; 1.EK: //直接使用bfs找最近的增廣路徑,每找到一條就更新殘餘網絡,然後繼續找,直到不存在爲止,這個真好懂^ V ^ #in

原创 分組揹包,混合揹包,有依賴的揹包

一.分組揹包(每組只能選一個) 所謂分組揹包,就是把物品分成n組,每組裏面m個物品,從這n組中每組選一個物品,使得在揹包體積是V的條件下價值最大; 思路:對於每一組由於只能選一個,所以就是決策這一組中選哪一個獲得的價值最大; fo

原创 poj1733(種類並查集+離散化)

參考博客 題意:給m個區間和這個區間內1的個數是奇還是偶,然後輸出第一個和前面相矛盾的區間的序號 思路:首先區間最大值有1e9,數組開不出來,而數據的輸入量卻很小,最多也就10000個數,所以先進行離散化處理區間的標號 區間內1的

原创 STL:vector

vector(向量): 是一種序列式容器,類似於數組,但是內置了許多方便的操作和算法,而且可以自動擴展空間,不會出現像數組一樣上限不夠而溢出。在末端插入刪除快,其他地方插入慢 使用vector需要頭文件 #include<vect

原创 codefocers Equidistant(多源bfs)

題意:給定一顆n個結點的樹和m個樹上的節點,問是否存在一個節點到m個點的距離相等,一條邊距離爲1。 思路:首先能想到的是,既然他們到某個節點的距離相等,那麼這m個節點一定存在於以該點爲根的樹的同一層次上,但是就是要如何找這個點,如

原创 迭代加深與雙向bfs

迭代加深:可以說是有條件的dfs,dfs是循着一條路一直走下去,知道找到答案或者撞牆了纔回頭,但是這樣找到的答案有時候不是最優的或者不是最快的,如果是spj的題有可能裸的dfs會T,而這個的原因就是dfs有點兒傻,它會一直往下走,

原创 poj 3279(狀態壓縮的搜索)

題目 題意:給一個僅由0,1組成nm的矩陣,每次操作可以反轉一個單元格(把0變成1,1變成0),同時這個單元格上下左右的所有格子也會反轉,求出把整個矩陣都變成0所需的做小操作次數,不可能的話輸出-1 思路:力扣上有一道很類似的題:

原创 HDU6534 Chika and Friendly Pairs(樹狀數組+離散化+莫隊)

Problem Description Chika gives you an integer sequence a1,a2,…,an and m tasks. For each task, you need to answer t

原创 LIS,LCS,LCIS

LIS(最長上升子序列),LCS(最長公共子序列)是動態規劃中基礎的兩個問題,今天連同他們的聯合版LCIS一起總結一下。 LIS(最長上升子序列):有兩種方法,一種DP(n*n),還有一種解法複雜度是貪心+二分(nlogn) 法一

原创 poj3261 Milk Patterns (哈希+二分)

Farmer John has noticed that the quality of milk given by his cows varies from day to day. On further investigation

原创 最近公共祖先(LCA)算法

最近公共祖先:設結點x是u,v的祖先並且x的深度是u,v所有共同祖先中最大的,則稱x是u,v的最近公共祖先; LCA的求解算法有三種: 一.tarjan算法求解LCA 這是一種離線算法,基於dfs和並查集,時間複雜度爲O(nlog