原创 51Nod 1125 交換機器的最小代價

把所有的點分成一個個的置換的循環,對於每一個循環用循環中的最小的數進行置換,但這可能不是最優的。要考慮用循環外的最小數與環內最小數交換後再進行操作,把這兩種都跑一遍,取最小值。 #include<iostream> #includ

原创 [Loj]#6002. 「網絡流 24 題」最小路徑覆蓋

題意如題名,最小路徑覆蓋。 答案爲點數減去最大匹配。 用匈牙利直接跑。 #include <cstdio> #include <cstring> #include <vector> using namespace std; const

原创 51Nod 1241 特殊的排序

因爲可以把一個數向最前面移或者是最後面移,即把不符合排序的那些數拿走,所以求的就是n-最長遞增序列的長度。 #include <cstdio> #include <cstring> #include <algorithm> us

原创 [Loj]#6001. 「網絡流 24 題」太空飛行計劃

分析後看出是最大權閉合子圖,那麼答案就是正權值-最大流。 #include <cstdio> #include <queue> #include <vector> #include <string> #include <iostream

原创 [Loj] #6000. 「網絡流 24 題」搭配飛行員

二分圖最大匹配值,直接裸上匈牙利。 #include <cstdio> #include <cstring> using namespace std; const int N=105; int n,m; int a,b; int ans;

原创 [Loj]#6003. 「網絡流 24 題」魔術球

我是直接用貪心跑的,但其實可以用網絡流來跑。 對於網絡流,通過分析可以得到,如果將i+j爲完全平方數的i與j連上邊。 那麼每一根柱子就是一條路徑,答案就是有n條路徑的最小路徑覆蓋。 可以自己畫圖YY。 #include <cstdio>

原创 [2017百度之星程序設計大賽 - 複賽]E - hdu6148

裸的數位DP,只需要判斷之前是否已經改變過遞增減就行了。 直接上模板。 #include<cstdio> #include<algorithm> #include<cstring> #include<cctype> #define ll

原创 [2017百度之星程序設計大賽 - 複賽]F - hdu6149

因爲是三元組<x,y,z> 暴力枚舉處於x位置的高谷,然後建網絡流的圖,每次跑dinic取最大流。 枚舉位置時直接dfs,上界是高谷總數的一半。 可以證明答案一定在dfs出的結果內。 #include <cstdio> #i

原创 [bzoj]4590: [Shoi2015]自動刷題機

二分答案,暴力驗證。找到一個最小滿足的值與一個最大滿足的值。 記得最後判斷二分的是否正確。 #include <cstdio> #include <algorithm> #define ll long long using namespa

原创 [2017百度之星程序設計大賽- 複賽] C - hdu6146

我們設 Bn 代表從某個角出發,然後走遍所有格子回到同一列的方案數目。 Bn=2×Bn−1=2n−1 同樣,我們設 An 代表從某個角出發,然後走遍所有格子的方案數。 則 An=Bn+2×An−1+4×An−2 其中 Bn 代表回到了當前

原创 [2017百度之星程序設計大賽 - 複賽]D - hdu6147

亂搞一下,可以推出如果相交,必定是這條邊之前的8條內的一條,那麼對於每條邊,暴力判斷一下。 就可以得出答案了,複雜度是O(跑的過)。 #include <Cstdio> #include <algorithm> #define C (c

原创 [Loj]#6004. 「網絡流 24 題」圓桌聚餐

建立源點s與所有單位連邊,建立匯點T將所有餐桌與t相連,再將單位與餐桌各連上容量爲1的邊。 跑一遍最大流即可。 輸出路徑時,只要查看改變是否有流即可 #include <cstdio> #include <queue> #include

原创 [bzoj]1520: [POI2006]Szk-Schools

對於每座學校,都將它與可更換的值連上一條容量爲1,權值爲c*|a-m|的邊。 然後跑一遍費用流就行了。 #include <cstdio> #include <queue> #include <cstring> #include <alg

原创 (開坑)在線/離線求lca

在線: ST: ST算法是基於RMQ來解決lca問題的。 對於一顆樹,先深度遍歷一遍,開一個ver數組儲存每次dfs的位置。 具體數組儲存什麼序列可以看這位的。 如果我們想求兩個點的lca。那麼就要在ver數組中從第一次出現x點到第一次出

原创 [2017百度之星程序設計大賽 - 複賽]A - hdu6144 B - hdu6145

這兩道題都是屬於模擬題,B題我棄坑了。 B題對於一個沒有表達式的數,找出它的循環節。 對於一個表達式也是找出它展開後重復的部分,用快速冪和快速乘計算,首尾單獨處理。 放一個A題 #include<cstdio> #include<al