原创 HDU 1045 Fire Net 二分圖匹配

機智建圖法。行爲一個集合裏的點,不能互相攻擊的行算兩個;列爲另一個集合裏的點。這樣做一個二分圖匹配,一個行就不能跟多個列匹配,避免出現互相攻擊的狀況,相當於做了一次縮點。 #include<iostream> #include<cstd

原创 HDU 1059 dividing 多重揹包

多重揹包模板題。 #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> #include<cmath> using namespace st

原创 HDU 1384 Intervals 差分約束

是這樣的,差分約束的建圖方法就不必細說了,建圖的時候,要把每個點看成是在某個區間裏取了多少點:比如,d[i]就表示從1到i有多少個點被取到了。這樣,對於一個區間[i,j]和c,我們有d[j]-d[i]>=c。這樣就很好建圖了,然後還有一點

原创 HDU 1058 Humble Numbers DP

這是一個簡單的DP,但我一上來寫了個錯誤的枚舉,哎,把傻子貼出來示衆啦。。。 #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> #inc

原创 HDU 1217 Arbitrage 最短路

floyed算法的變形。 #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> #include<queue> #include<map>

原创 Codeforces 1010C Border 數論

根據一個什麼玩意兒沒聽說過的定理,求的答案居然等價於n=1且衆模與m的gcd作爲輸入的情況。。。 #include<iostream> #include<cstdio> #include<string.h> #include<algor

原创 HDU 1598 find the most comfortable road 並查集+貪心

對邊做一個排序,然後對於每一個詢問,每次都去枚舉權值最小的邊,再做最小生成樹,一旦詢問中的點聯通了,我們就可以認爲在當前最小邊權值的情況下,舒適度最大的情況已經達到了。 #include<iostream> #include<cstdi

原创 HDU 1394 Minimum Inversion Number 線段樹+思維

去年用樹狀數組做過這道題,今年思路一樣,多虧這是個n的全排列,每動一個數,你知道會有多少數發生改變。第五次手寫線段樹,寫過了高興。 #include<iostream> #include<cstdio> #include<string.

原创 HDU 1114 Piggy-Bank 揹包dp

紀念dp黑洞水題開竅 #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> using namespace std; int e,f,t,

原创 POJ 1860 Currency Exchange spfa

注意,使用spfa算法的時候,一個點進隊n+2次說明所有與其相關的點均已經得到了正環的收益,然而除此之外什麼都不能說明,在這道題上,也就不可能說明此時某點的值是否可以大於它的初始值。spfa是個神奇的算法,的空一定要好好研究一番。 #i

原创 Gym 101655B Bones’s Battery floyed+二分

先跑一遍floyed,求出兩兩點對之間的最小距離。然後這個最小距離就相當於一個最新的地圖了,新地圖裏,小於當前二分枚舉值,就充1次電,大於這個值,就衝無窮大次電,起點終點相等,就充0次電。再跑一次floyed,看看當前二分枚舉的容量符不符

原创 Codeforces 980E The Number Games 樹上倍增

2的指數,前n-1個數的和不如第n個數大。所以我們要把n-k個最大的數保留下來。做法就是貪心排個序,每次找一下還能路徑上經過的點數不超過還能放在集合裏點數的最大的點。咋找路徑呀,那就用樹上倍增。 #include<iostream> #

原创 HDU 1121 Complete the Sequence 差分

使用差分的方法畫一個倒三角,找到規律以後做遞推。以前從不曉得差分法,差點就上高斯消元了。 #include<iostream> #include<cstdio> #include<string.h> #include<algorithm

原创 Codeforces 979E Kuro and Topological Parity dp+組合數

真是差一點點就整出來轉移方程了,這個方程也不咋難想的呀。假設每一次都把新的點加在了舊點後面。爲什麼是加在後面,不是多算加在前面,也不算加在中間?其實算加在前面也無妨,只是一定只能算成加載某一固定位置,因爲這三種加法出來的狀態數互相重疊的,

原创 HDU 1247 Hat’s Words 字典樹

題目沒告訴字符串的長度,一開始開了個vector,一邊再字典樹上找單詞,一邊記錄可能是兩個單詞拼接處的位置,結果竟然爆了空間,想不明白,明明每次都把vector清空了呀,倘若空間爆了炸,時間更應該爆炸纔對,結果最後發現人家都枚舉的字符串拼