HDU 4160 Doll 最小路徑覆蓋

2021-06-18 23:57:10 字數 1432 閱讀 3291

/*

題意:給出n個箱子,箱子可以放在箱子裡邊,但是要滿足放在裡邊的箱子的長要小於外邊的長,寬要滿足小於外邊的寬,高要滿足小於外邊的高。求露在外邊的箱子最多有多少個。

思路:思路:最小路徑覆蓋,如果滿足條件:wi < wj , li < lj , and hi < hj,那麼i->j連邊,然後就是求最大匹配。

最小路徑覆蓋=頂點數-最大匹配。

*/#include "stdio.h"

#include "string.h"

#include "queue"

#include "algorithm"

using namespace std;

const int maxn = 505;

const int inf = 1<<30;

int nx,ny;

int dis;

int map[maxn][maxn]; //二分圖

int cx[maxn],cy[maxn]; //cx[i] 表示左集合i頂點所匹配到的右集合頂點序號 cy[i]表示右集合i頂點所匹配到的左集合頂點序號

int dx[maxn],dy[maxn]; //dx[i] 表示左集合i頂點的距離標號 dy[i] 表示右集合i頂點的距離標號

bool vis[maxn]; //尋找增廣路時 的標記陣列

struct node

doll[maxn];

bool cmp( node a, node b )

//hopcroft-karp演算法 有點類似dinic 都是先對圖bfs分層再沿層數dfs找增廣路

//***********************************=核心

bool searchpath()

} while( !que.empty() )

}} }

return dis != inf;

}int findpath( int u )

} }return false;

}int maxmatch()

for( i = 1; i <= ny; i++ )

while( searchpath() )

for( i = 1; i <= nx; i++ )

}} return ans;

}//***********************************=

int main()

} for( i = 1; i <= nx; i ++ )

sort( doll+1,doll+nx+1,cmp );

for( i = 1; i <= nx; i ++ )

}} printf("%d\n",nx-maxmatch() );

} return 0;

}

hdu1960 最小路徑覆蓋

題意 給你明天的計程車訂單,訂單中包含每個人的起點和終點座標,還有時間,如果一輛計程車想接乙個乘客必須在每個訂單前1分鐘到達,也就是小於等於time 1,問你完成所有訂單要最少多少量計程車.思路 典型的最小路徑覆蓋,對於最小路徑覆蓋,我們可以這麼理解,最次的情況是n輛,而只要找到那麼一組可以與其匹配...

HDU1151最小路徑覆蓋

dag圖 無迴路有向圖 的最小路徑覆蓋 用盡量少的不相交簡單路徑覆蓋有向無環圖 dag 的所有頂點,這就是dag圖的最小路徑覆蓋問題。最小路徑覆蓋數 節點數 最大匹配數 include include include using namespace std const int maxn 200 in...

最小路徑覆蓋問題(最小路徑覆蓋)

本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...