description
求乙個 \(01\) 串中所有重複出現次數大於 \(1\) 的子串所出現的次數,按照字典序排序輸出。
solution
預處理出字尾陣列和高度陣列。
對於每乙個字尾 \(i\) ,如果 \(h[i+1]>h[i]\) ,我們就去找到在這之後對任意 \(j \in (h[i], h[i+1]]\) ,第一次出現 \(h[k]的 \(k\) ,那麼 \(k-i\) 就是這個子串出現的次數。
很不優美的解法,但是好像又沒有別的辦法。還不如直接建字典樹。
#include using namespace std;
int n,m=256,sa[1000005],y[1000005],u[1000005],v[1000005],o[1000005],r[1000005],h[1000005],t;
char str[1000005];
long long ans;
int main()
for(int i=1; i<=n; i++)
}for(int j=tmp.size()-1; j>=0; --j)
cout<}
}}
嚴格次小生成樹 BJWC2010
原文必點 原題鏈結 給定一張 n 個點 m 條邊的無向圖,求無向圖的嚴格次小生成樹。設最小生成樹的邊權之和為 sum 嚴格次小生成樹就是指邊權之和大於 sum 的生成樹中最小的乙個。輸入格式 第一行包含兩個整數 n 和 m 接下來 m 行,每行包含三個整數 x,y,z 表示點 x 和點 y 之前存在...
BJWC2010 嚴格次小生成樹
板子題 先kruskal得到最小生成樹,再列舉未加進生成樹中的邊i,該邊i和生成樹樹形成了乙個環,選擇這個環上最大的不等於i的權值的邊去掉就得到乙個新的樹,所有這樣得到的樹權值之和即為次小生成樹。求環上最大邊可以用倍增或者樹鏈剖分,由於最大邊可能和才加上去的邊相等,所以還要維護乙個次大邊 inclu...
P4180 嚴格次小生成樹 BJWC2010
題目鏈結 當時在暑假早就講了這道題了,只不過我現在才做了這道題。題解 我們要求次小生成樹的話,考慮先把最小生成樹求出來,因為如果我們用求最小生成樹的話,邊早已經從大到小排序好了,所以次小生成樹的就是替換最小生成樹上的一條邊所得。那麼考慮如何來替換那一條邊,要保證嚴格次小,那麼我們需要替換掉最小生成樹...