原创 ZOJ 2027

一道變相的FLOYD,想通以後還是蠻簡單的,主要的難點是建圖和更新兩點之間的距離: 簡要的說一下,建圖的話就用MAP就好; 之後跟新兩點之間的距離需要引入一個maxcost數組,用於標記兩點之間的最大費用;這樣一來更新規則就有了: cos

原创 東北賽的各種吐槽

這是本學期的最後一次比賽,也是我繼省賽之後參加的第二個大型比賽,總的來說比完之後還比較開心。 第一天的warm up各種無語逗。。。 總共五道題。。映像最深的是第三道C題。。。正確解法輸入N,M再輸出M。。。。最開始題目一大段,沒整明白,

原创 一道UVA上比較詭異的搜索

不記得題號了就描述一下提議,就是在一個迷宮裏面有一個起點,和一個着火點,每一單位時間每個點的火向外延伸一個單位(上下左右); 問最短多久可以走出迷宮,不可以則輸出IMPOSSIBLE; 所謂走出去就是出到迷宮外頭; 這道題的難點就是每一單

原创 POJ 1511

這是我用鄰接表過得第一道題;不得不說最開始參考了網上大神的代碼;花了一晚上終於明白了鄰接表的用法;head[s]代表的是入點爲S的邊標號,而edge.next記錄的是下一條入點爲s的邊的標號; 然後就是水水的SPFA了,求兩次就可以了;

原创 HDU 1142

這道題在最短路方面沒什麼問題,主要是最後求出每一點到終點的最短路之後要使用記憶化搜索來尋找可以行走的路數 不多說直接上代碼: #include<stdio.h> #include<string.h> #include<algorithm>

原创 ZOJ 2977

乍一看蠻噁心的不知道怎麼搜索,但是後來一想其實只要枚舉第一行的狀態,也就是遍歷第一行的每個點(按與不按),然後每一行更具上一行來選擇按與不按; 即如果map[i-1][j]=='X'那麼(i,j)一定要按; 時間複雜度大概就在2^16*n

原创 HDU 4832

首先這道題目的話最先想到的就是DP了,最開始的想法就是開一個三維數組dp[x][y][step]=dp[x-2][y][step-1]+dp[x-1][y][step-1]+dp[x+2][y][step-1]+dp[x+1][y][st

原创 ZOJ 1654

二部圖匹配問題,思路大致就是先將空地按照行進行標號,之後再按照列標號,最後把重疊的部分連一條邊,在用匈牙利求出最大的匹配數就可以了,主要是建圖這一個步驟,圖建好了就很簡單了;以下是代碼: 話說這次的代碼是不是很優美呢。。。。。。 #inc

原创 POJ 1149

紀念一下我的第一個網絡流;最基本的標號法FORD算法,基本上能把圖建立出來就是模板了;具體解釋見代碼: #include<stdio.h> #include<algorithm> #include<queue> #include<str

原创 POJ 3281

這道題最開始看見是在書上的二分圖匹配上面看見的,(我是先學二分圖在學網絡流),當時一直不知道怎麼建這個二部圖,直到學了最大流之後才猛然想起這道題; 簡單說下建圖思路,主要是牛這個地方要拆點,如果不拆的話以下這組數據就不對了: 1 2 2

原创 hdu 1166

沒什麼好說的就是一道線段樹模板提;紀念一下自己第一道線段樹;順便展示一下自己的模板。。 #include<stdio.h> #include<string.h> #include<algorithm> #define lson l,m,r

原创 POJ 1062

這道題對於最短路來說沒什麼難的,難點在於等級差問題,不過好在數據集不大可以枚舉枚舉最低等級,在進行球最短路 詳細解釋見代碼: #include<stdio.h> #include<string.h> #include<algorithm>

原创 大一的總結

隨着東北四省賽的結束,和期末考試的來臨,我的大一生活也即將結束。 在進入大學的第一個學期,滿腦子都是當學霸,轉專業,混社團;經過一個學期,自己學霸也裝了,社團也混了,也仔細的看待了轉專業這件事; 然後發現學霸不是那麼好裝的,社團與自己想象

原创 拓撲排序

一道拓撲排序;根據題意求出Sn其意義就是前N項的和,利用An=Sn-Sn-1可以求出最終解; 不多說直接上代碼: #include<stdio.h> #include<string.h> #include<algorithm> using

原创 POJ 1127

並查集+上判斷兩條線段是否相交就可以了,仔細看數據集非常小,所以基本上可以不用考慮時間複雜度; 本題的難點主要是判斷兩條線段是否相交;特殊情況比較多,具體的見代碼: #include<stdio.h> #include<algorithm