原创 天梯賽補題 - 最小生成樹的唯一性

跑出最小生成樹後,記錄MST中的每條邊,然後枚舉MST中的每條邊,再跑n-1次MST,如果新的MST大小和原來的一樣並且 MST邊數要爲n-1,那麼則不唯一 #include <cstdio> #include <cstring>

原创 LCA轉RMQ模板

int head[maxn]; int first[maxn];//首次出現的下標 int dp[maxn*2][30]; bool vis[maxn]; bool ok[maxn]; int deep[maxn*2];//深度數

原创 天梯賽補題 - 樹的同構

我居然連這種遞歸不太會寫了 直接暴力ASCII值作爲下標開點233 注意0 0的情況 #include <cstdio> #include <cstring> #include <algorithm> #include <i

原创 天梯賽補題 - 周遊世界(記錄路徑的最短路)

硬生生被我寫出來了, 這個記錄路徑我繞了半天= =。 #include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <

原创 UVA 12549 (二分圖匹配)

對於這種x,y座標的,算是老套路了,每個點就是把x,y連在一起 選取最少點覆蓋所有的x,y,那麼就是個二分圖匹配,只是這題有障礙物,所以需要拆點,重新賦值行和列 思路代碼參考這篇文章 #include <iostream>

原创 HDU 4734 (數位dp)

又重新學習了一遍數位dp,真的不太熟練 一個是對這個記憶化不太理解 後來看到就是說 假如現在搜3xxx,之前1xxx往後搜的時候3xxx已經搜過了,所以直接可以返回 dp[i][j]表示搜索到第i位總和不超過j的個數 所以

原创 HDU5692(dfs + 線段樹)

題解:是個好題,對於經過某一點的最大值,可以將某一點作爲根,他的子樹中到0的最大值即爲解。那麼這樣,可以用dfs跑出一個序,即當前點到0的值,每個點維護一個L,R區間,那麼這個區間的點就是它的子樹。對於單點更新一個值,那麼就變成區

原创 Uva11468(AC自動機+概率dp)

坑死我了,其實我還是不太懂爲什麼一定要補上不存在的邊? 但是這題的妙處就是可以由fail跑出所有的後綴來 #include <iostream> #include <algorithm> #include <queue> #in

原创 POJ1273(最大流)

Dinic算法的基本實現 #include <iostream> #include <algorithm> #include <queue> #include <stack> #include <cstdio> #include

原创 天梯賽補題 - 家譜處理

這題之前數據結構作業做過,寫的好像挺麻煩的,比賽時也沒功夫寫,今天靜下心來倒是想了個不錯的方法,無BUG 1A #include <cstdio> #include <cstring> #include <algorithm> #

原创 codeforces 595E(思維暴力)

題意:給你平面上n個點,刪除小於等於k(k<=10)個點使得能用一個最小的平行於座標系的矩陣覆蓋所有點 題解:顯然,一定是刪除“最外面”的點是最優的。 那麼對所有點分別以x、y排序,枚舉上下左右邊界,判斷最小面積。 這個思路第一次見

原创 codeforces 632E (完全揹包)

題意:給你n個物品的重量,問取k個能獲得多少種不同的重量 感覺是一個dp的套路,乍一看像是個多重揹包,但是沒法同時維護多個值,所以將所有重量減去最輕的,那麼最輕的就變成0了,轉而變成一個完全揹包 dp[i]表示重量爲i的情況下所需要的

原创 Codeforces 660E (dp || 組合數學)

dp[i][j]dp[i][j] 表示長度爲ii ,以字符jj 結尾的答案是多少 對於普通的來說,一個經典的轉移方程 dp[i][j]=∑mk=0(dp[i−1][k]∗2−dp[pre[j]−1][k])dp[i][j]=∑k=0m

原创 Gym - 101128A(dfs)

當成拓撲寫了,少了很多情況 維護一下當前這個人控制的人數 = x,和選這個人需要選的人 = y, 那麼對於某個人必選,就是這個人不選(控制的人也就不能選了),剩下的人不足a (b) ,就必選 n - x < a (b) 對於某個人

原创 POJ3761 (組合數學)

組合數學真難啊。。預備知識需要的太多了 東拼西湊來學習 證明網上很多,我也是這麼學來的 #include <iostream> #include <algorithm> #include <queue> #include <stack