原创 hdu1269——迷宮城堡——————【雙向並查集判斷】

解題思想:通過利用設定1爲根節點,然後建立以1爲根的樹,查找時,如果所有節點都是以1爲根,則說明單向互通;然後再逆序採用相同的操作,如果逆序得到的所有節點也是以1爲根,則說明逆向互通,此時說明圖爲強連通圖。這裏用兩個父親數組來完成正向和逆

原创 大數階乘——————數組模擬

突然發現大數階乘還能用這麼簡單的數組模擬,但是感覺複雜度好像有點高,一次運算是n*MAXN的複雜度,雖然空間複雜度比較低。 #include<stdio.h> #include<string.h> const int MAXN = 500

原创 hdu1269——迷宮城堡——————【kosaraju】

概念解釋    [強連通]——有向圖G中,任意點對能相互到達,即存在路徑,則稱爲強連通。                               [連通分量]——指的是無向圖中的極大連通子圖。一個連通圖的生成樹是一個極小連通子圖。

原创 HDU2063——過山車——————【二分圖最大匹配模板】

/**    未蓋點:不與任何匹配邊鄰接的點    匹配點:匹配邊相連的頂點    匹配:兩兩沒有公共點的邊集    交替路:從未蓋點出發,依次經過非匹配邊,匹配邊,非匹配邊....所得到的路徑    增廣路:交替路的終點是一個未蓋點。

原创 hdu1728——逃離迷宮——————【BFS】

解題思路:通過曾經一個計數數組,將所有可到達該點位置的轉彎次數更新爲最小值,最後通過比較目的位置的轉彎次數來判斷是否能夠到達。 #include<stdio.h> #include<iostream> #include<string.h

原创 hdu1350——Taxi Cab Scheme——————【最小路徑覆蓋、最大匹配轉化】

/*    解題思路:                      本題目模型是DAG的最小路徑覆蓋。最小路徑覆蓋可以轉化成最大匹配求解。                      解法:將所有節點i拆爲點Xi和點Yi,如果圖中存在有向邊i

原创 0-1分數規劃

轉自:http://www.cnblogs.com/perseawe/archive/2012/05/03/01fsgh.html 【關鍵字】 0/1分數規劃、最優比率生成樹、最優比率環  【背景】  根據樓教主的回憶錄,他

原创 最大流Dinic模板

</pre><p>//複雜度O(n^2*m)</p><pre name="code" class="cpp">#include<bits/stdc++.h> using namespace std; const int maxn=650;

原创 poj3254——Corn Fields——————【狀態壓縮】

/**     解題思路:首先將原圖每一行當做一個二進制數,按位取反得到另一個十進制數。然後求出在所給的列的範圍內的合法狀態,即沒有任意兩個1相鄰,放入數組legal中,每種合法狀態對應數組的一個下標。再單獨求出第一行的所有可行狀態,將d

原创 POJ3349-Snowflake Snow Snowflakes

轉自:優YoU  http://user.qzone.qq.com/289065406/blog/1304831877 大致題意: 在n (n<100000)個雪花中判斷是否存在兩片完全相同的雪花,每片雪花有6個角,每個角的

原创 hdu1238——Substrings——————【求多個字串的最長公共子串】

/** 解題思路:因爲給的數據範圍比較小,所以就是暴力思想。首先找出最短的串,然後從短到長截取子串,遍歷除最短串以外的其他串,看是否含有相同的子串。 */ /* 題目大意:給t組測試數據,每組有一個n,代表有n個字符串,求n個字符

原创 hdu2126——Buy the souvenirs——————【01揹包記錄物品最多時種數】

/**    解題思路:多加一維表示物品個數。dp[j][k]代表揹包容量爲j,物品個數爲k時的組合種類數目。 */ /*    題目大意:給你n種物品,有m塊錢,然後給出n種物品的花費,問物品個數最多時的組合種數有多少。 */ #inc

原创 poj1321——棋盤問題——————【狀態壓縮、動態規劃】

/*    解題思路:首先確定各個狀態值對應的二進制中有幾個1。然後初始化dp[0][0]爲一種解決方案,雖然不會計入最後的結果。但是卻影響着下面每行的計算。只對二進制中1的個數小於等於k的狀態值操作,枚舉每種狀態值。本行j狀態值下的方案

原创 最大流ISAP模板

//複雜度O(n^2*m)一般比dinic快些 #include<bits/stdc++.h> using namespace std; struct Edge{ int from,to,cap,flow; }; const in

原创 nyoj85——炮兵陣地——————【狀態壓縮、動態規劃】

/**    結題思路:用dp[r][i][j]表示第r行r行狀態爲i,r-1行狀態爲j時的最大可部署炮兵的個數。通過求解合法狀態,縮小需要遍歷的狀態範圍。同時求出各個合法狀態的二進制中1的個數,然後特殊處理首行,然後dp求解每行每種可行