原创 tarjan算法、割點和割橋,

tarjan算法是求一個圖的強連通子圖的 dfn[u]數組記錄的這個節點入樹的時間 low[u]數組記錄的是以u爲根節點的子樹中最小的時間戳 步驟是:通過搜索不斷的更新low和dfn數組, 這個過程其實很好相同,對於一個聯通分量,

原创 已知前序和中序,重建二叉樹

已知前序和中序,重建這顆二叉樹 前序:1 2 4 8 9 5 10 3 6 7 中序: 8 4 9 2 10 5 1 6 3 7 後序:8 9 4 10 5 2 6 7 3 1 # include<iostream> using

原创 主席樹——數據結構的剋星

1.主席樹:又叫可持續化線段是,因爲每次對主席樹的修改,都會重新建立一棵新的數,保留這沒修改之前的歷史紀錄,所以叫可持久化線段樹,她是以線段樹爲基礎建立的多棵樹,每棵樹代表着一個歷史階段,它與線段樹的存儲結構稍微有點不同,就是線段

原创 線段樹——數據結構的剋星

線段樹 樹狀數組不適合進行對區間的修改,對於區間修改我們一般使用線段樹 線段樹每個節點存儲時一段區間的值,這個視題目而定,每次把一段區間每次劃分爲兩部分,新建兩個節點來存儲,直到葉子節點爲止,所以說,所有葉子節點節點就是原數組 線

原创 樹狀數組-——數據結構的剋星

樹狀數組 樹狀數組的tree[i]維護的是前面一段區間的狀態,這個視題意而定,比如題目要求一段區間的和,那麼樹狀數組tree[i]表示前面一段區間的和,如果題目要求一段區間的最大值,那麼樹狀數組tree[i]表示前面一段區間的最

原创 多重背板問題

#include<bits\stdc++.h> using namespace std; typedef long long ll; const int maxn=1e3; int main() { ios::sync_with

原创 二維費用揹包,二維揹包

①基本題型:二維費用的揹包問題是指對於每件物品,具有兩種不同的費用,選擇這件物品必須同時付出這兩種代價,對於每種代價都有一個可付出的最大 值(揹包容量),求選擇物品可以得到最大的價值。設第i件物品所需的兩種代價分別爲v[i]和u[

原创 pair

pair<T1, T2> p1; //創建一個空的pair對象(使用默認構造),它的兩個元素分別是T1和T2類型,採用值初始化。 pair<T1, T2> p1(v1, v2); //創建一個pair對象,

原创 01揹包問題

01揹包模板 #include<bits\stdc++.h> using namespace std; typedef long long ll; const int maxn=1e3; int main() { ios::sy

原创 揹包問題剋星——分組揹包

揹包問題剋星——分組揹包 有N件物品,告訴你這N件物品的重量以及價值,將這些物品劃分爲K組,每組中的物品互相沖突,最多選一件,求解將哪些物品裝入揹包可使這些物品的費用綜合不超過揹包的容量,且價值總和最大。 算法: 首先判斷一個分組

原创 字典樹模板

const int maxn=1e5; int tree[maxn][26]; int count[maxn]; int tot=0; void build(string s) { int len=s.size(); int

原创 最小表示法

最小表示法 首先定義兩個變量i,j表示懷疑最小的開始下標,在定義一個變量k表示如果s[i]==s[k] 時向後比較s[i+k]和s[j+k]; 首先明確這裏的i和j不分前後 1.如果s[i] <s[j],那麼j++; 2.如果s[

原创 斐波那契數列性質

看到好的東西就要盜過來!!!! 點贊 1 收藏 分享 文章舉報 溺水的魚。。。 發佈了52 篇原創文章 · 獲贊 41 · 訪問量 7254 私信

原创 map or multimap——STL的剋星

map or multimap pair只包含一對數值:pair<int,char> map是一個集合類型,永遠保持排好序的, map每一個成員就是一個pair,例如:map<int,char> map的insert()可以把一個

原创 L2-010 排座位

L2-010 排座位 (25分) 佈置宴席最微妙的事情,就是給前來參宴的各位賓客安排座位。無論如何,總不能把兩個死對頭排到同一張宴會桌旁!這個艱鉅任務現在就交給你,對任何一對客人,請編寫程序告訴主人他們是否能被安排同席。 輸入格式