原创 HihoCoder 1722 尺取法

對於每個數字,記錄他的值以及他所在的行數,然後把所有數字從小到大排序,建立左指針和右指針,只要左右指針之間包含的數沒有遍佈所有行(用cnt計數,vis數組記錄每行出現的次數),就將右指針右移。遍佈所有行之後,左指針右移知道左指針對

原创 POJ 1273 最大流

裸題,可以用vector儲存鄰接表來使代碼變得簡潔。 輸入新的一組測試數據的時候要記得清空。 下爲Dinic算法的代碼。 #include <iostream> #include <stdio.h> #include <strin

原创 LightOJ 1150 Ghosts! 二分圖 BFS 枚舉

題意:給一個矩陣,"."代表空地,“#”代表迷霧,“G”代表鬼,“H”代表人,每個鬼要嚇唬一個人,然後回到自己的位置,每走一格消耗一分鐘,嚇唬人消耗兩分鐘,每個鬼只能嚇唬一個人,求需要消耗的最小時間。 思路:用BFS求出所有鬼和人

原创 HDU 6341 DFS搜索

思路比較簡單,就是對於十六個區域逐個搜索它旋轉了多少次,因爲只有16個大格所以複雜度不會太大。 #include <iostream> #include <math.h> #include <iomanip> #include <

原创 UVALive 8273 DFS

按照點從0到n-1dfs即可。 一開始我在想能不能按照連接的順序來dfs,後來看了別人的答案發現這樣複雜而且沒有必要。 #include <iostream> #include <math.h> #include <iomanip

原创 Codeforces Kitchen Plates

題意:有5個未知量,給五個不等式,要求你按照大小給出一個排序,如果自相矛盾的話就輸出impossible。 分析:拓撲排序即可,如果成環的話,輸出隊列裏的元素個數會小於五。 暴力便利所有排列然後根據給的條件判斷是否成立也可以。 拓

原创 HihoCoder 1839 數學

這題本質上是個暴力。 首先把輸入數字的所有位數加在一起,我們把它稱爲total,要求的就是total*(1111…111)(n位)的最小質因數。如果直接暴力求值的話單是對於一個質數求total*(1111…111)%Mod就要n的

原创 HihoCoder 1469 dp

一道不太明顯的dp,dp[i][j]的含義是,以i,j爲右下角的福字的大小。 首先進行預處理,兩個二維數組。shang[i][j]表示從座標ij的元素開始向上尋找,能找到多少個元素使他們都滿足map[i-1][j] + 1 ==

原创 POJ 3281 最大流

一道隱含的最大流問題。 首先,把每種food當作一個節點,與頭部的s節點相連,每種drink當作一個節點,與結尾的t節點相連,這些路徑的容量都爲1(因爲每種food或者drink只能選一次)。然後如果在中間爲每頭牛建立一個節點,連

原创 HDU 1151 Air Raid

題意:一座城市有一些路口,兩個路口用一條道路連接(道路是單向的),現在我們要在一些路口空降傘兵,每個傘兵都可以沿着道路走並佔領路口,但不能有兩個傘兵佔領同一個路口的現象,請問最少需要多少傘兵。 分析:把路口當作點,求出最小覆蓋不重

原创 UVALive 8275 網絡流

把給定的每種相同的時間段成一個點,再把每一天抽象成一個點,每一天都與匯點連一條容量爲0的邊(以後需要擴張,所以一開始設爲0)。 然後對於每個時間段,都對他對應的天連一條容量爲INF的邊。 然後這裏需要用到一個mp數組,用來存儲時間

原创 CodeForces 1139E 二分圖

把潛能當作左邊的點,俱樂部當作右邊的點,建立二分圖,匹配的時候從潛能0開始,一旦匹配失敗就跳出。 因爲二分圖無法刪邊,所以我們可以反過來,先把不會刪掉的邊放進去,然後把會刪掉的邊一條一條放進去,每放進去一條就從上次算到的最大匹配開

原创 POJ 1149 最大流

我們可以把每位客人當作節點建立網絡流,豬圈中豬的數量便是對流量的限制。首先,如果一個客人第一次打開a豬圈,那我們就在起點s與這位客人之間連一條容量爲豬圈a中初始值得邊(因爲他是第一個開這個豬圈的人,無法調配),對於後來的每個客人,

原创 Hihocoder 1878 尋找回文數

一開始打算寫大數加法,後來發現想多了,找規律就可以了 對於某數字n,位數小於等於n的迴文數大概有這麼多 [0]:0 [1]:10 [2]:19 [3]:109 [4]:199 [5]:1099 [6]:1999 [7]:10999

原创 POJ 3469 最小割

每個module都是一個節點,都有兩條邊,一條從s練到該節點,一條從該節點連到t,邊的容量即爲放在對應core上的代價。如果我們把這個module放在coreA上,就等價於隔斷s到該節點的那條邊,反之,如果放在coreB上,就等價