原创 BZOJ1096: [ZJOI2007]倉庫建設(洛谷P2120)

斜率優化 BZOJ題目傳送門 洛谷題目傳送門 設f[i]f[i]f[i]爲前iii個工廠且在iii建倉庫的最小代價。那麼有f[i]=min{f[j]+c[i]+∑k=jip[k]∗(X[i]−X[k])}f[i]=min\{f[j]+

原创 BZOJ3875: [Ahoi2014&Jsoi2014]騎士遊戲(洛谷P4042)

最短路 DP BZOJ題目傳送門 洛谷題目傳送門 很顯然有f[u]=min(ku,su+∑f[v])f[u]=min(k_u,s_u+\sum f[v])f[u]=min(ku​,su​+∑f[v])。但是這個是有後效性的,那麼就用s

原创 BZOJ5334: [Tjoi2018]數學計算(洛谷P4588)

線段樹 BZOJ題目傳送門 洛谷題目傳送門 線段樹維護每次操作的數,撤銷就把那個位置變成1就好了。 代碼: #include<cctype> #include<cstdio> #include<cstring> #include<al

原创 BZOJ2982 combination

lucas 題目傳送門 裸題不解釋。 代碼: #include<cstdio> #include<algorithm> using namespace std; const int p=10007; #define N p+5 int

原创 BZOJ1855: [Scoi2010]股票交易(洛谷P2569)

單調隊列 DP BZOJ題目傳送門 洛谷題目傳送門 設f[i][j]f[i][j]f[i][j]表示前iii天還剩jjj股的最多錢數。有四種轉移方式。 1.之前沒有股票,直接從這一天開始買,f[i][j]=−j∗APi(j∈[0,AS

原创 洛谷P3573 [POI2014]RAJ-Rally(BZOJ3832)

拓撲排序 堆 洛谷題目傳送門 BZOJ題目傳送門 妙蛙 注意到這是一個DAG,那麼我們可以一遍拓排求出從起點到iii爲最長路ds[i]ds[i]ds[i]和iii到終點的最長路dt[i]dt[i]dt[i](s向所有入度爲0的點連邊,

原创 BZOJ2462: [BeiJing2011]矩陣模板

哈希 題目傳送門 二維哈希就好了。注意不要用unsigned long long,會T的(BZOJ 32位機子)。 代碼: #include<cstdio> #include<cstring> #include<algorithm>

原创 洛谷P3512 [POI2010]PIL-Pilots(BZOJ2096)

單調隊列 洛谷題目傳送門 BZOJ題目傳送門 划水 用兩個指針推,單調隊列維護最大最小值。 代碼: #include<cctype> #include<cstdio> #include<cstring> #include<algori

原创 BZOJ4419: [Shoi2013]發微博(洛谷P3998)

STL BZOJ題目傳送門 洛谷題目傳送門 數據結構矇蔽了我的雙眼。 對每個人用一個set維護當前和他成爲好友的人,並記錄他發的微博數。那麼對於兩個人x,yx,yx,y,xxx對yyy的貢獻即爲從成爲好友到解除好友中xxx發的微博數量

原创 洛谷P3431 [POI2005]AUT-The Bus(BZOJ1537)

樹狀數組 洛谷題目傳送門 BZOJ題目傳送門 神TM裸的二維偏序我沒看出來 把其中一維離散後,用另一維排序。然後樹狀數組維護就好了。 代碼: #include<cstdio> #include<cctype> #include<cst

原创 BZOJ1131 [POI2008]Sta(洛谷P3478)

DFS BZOJ題目傳送門 洛谷題目傳送門 先一遍DFS算出每個節點的sizesizesize並統計根節點的答案。而對於一個子節點,當它作爲根時,它子樹到它的距離-1,其他點的距離+1。那麼全算出來就好了。 代碼: #include<

原创 BZOJ2115: [Wc2011] Xor(洛谷P4151)

線性基 BZOJ題目傳送門 洛谷題目傳送門 妙蛙 假如我們已經找到一條路徑,如果要使答案變大,顯然只能在這條路徑上加環。而從路徑到環的邊會走兩遍,因此不會影響答案。那麼我們把所有環扔進線性基裏,然後用這條路徑求出最大值即可。 至於這條

原创 BZOJ2212: [Poi2011]Tree Rotations(洛谷P3521)

線段樹合併 BZOJ題目傳送門 洛谷題目傳送門 學了發線段樹合併。 對於一棵子樹,無論它是否交換,都不會影響到這棵子樹外的其它節點。那麼我們只要每一次取小的那個就好了。 對每個節點開一棵權值線段樹,每次把左右兒子合併上來。而左右兒子有

原创 BZOJ1833: [ZJOI2010]count 數字計數(洛谷P2602)

亂搞 BZOJ題目傳送門 洛谷題目傳送門 把題目轉化成求1到n的出現次數。設f[i]f[i]f[i]表示第iii位出現的總次數,那麼有f[i]=f[i−1]∗10+10i−1f[i]=f[i-1]*10+10^{i-1}f[i]=f[

原创 BZOJ1123: [POI2008]BLO(洛谷P3469)

Tarjan BZOJ題目傳送門 洛谷題目傳送門 顯然不是割點的點答案都是(n−1)∗2(n-1)*2(n−1)∗2,我們只需要算一算割點的答案就好了。而割點的額外答案爲DFS樹上各個子樹之間兩兩配對的貢獻加上子樹內和子樹外的貢獻。這