poj 3041(二分匹配,匈牙利)
2010-08-02 10:15
239 查看
题意:给定一个网格和网格上的一些点要求用最少的竖线或直线覆盖所有的点。
思路:如果把网格的行号和列号看成点,然后用点的行坐标和列坐标建边,那么如果一个点集覆盖了所有的边,那么根据这个点集作竖线或横线就一定可以覆盖所有网格上的点。这样问题就转换为求最少点覆盖了。
思路:如果把网格的行号和列号看成点,然后用点的行坐标和列坐标建边,那么如果一个点集覆盖了所有的边,那么根据这个点集作竖线或横线就一定可以覆盖所有网格上的点。这样问题就转换为求最少点覆盖了。
#include <iostream> #include <cstdio> using namespace std; int n; bool edge[505][505]; int link[505]; bool vis[505]; bool Find(int a) { int i,j,k; for(i=1;i<=n;i++) { if(!vis[i]&&edge[a][i]) { vis[i]=true; if(link[i]==-1||Find(link[i])) { link[i]=a; return true; } } } return false; } int solve() { memset(link,-1,sizeof(link)); int i,j,k=0; for(i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(Find(i)) { k++; } } return k; } int main() { // freopen("in.txt","r",stdin); int i,j,k,m; scanf("%d%d",&n,&m); memset(edge,0,sizeof(edge)); while(m--) { scanf("%d%d",&i,&j); edge[i][j]=true; } printf("%d/n",solve()); return 0; }
相关文章推荐
- poj 3041 Asteroids 二分匹配 匈牙利算法 模板题
- POJ 3041 匈牙利算法 最小覆盖 最大二分匹配
- poj 3041 二分匹配 基础题(整理版:基础知识)匈牙利算法
- poj - 3041 Asteroids (二分图最大匹配+匈牙利算法)
- POJ 2239 Selecting Courses(二分匹配匈牙利啊)
- 【POJ】-3041-Asteroids(二分最大匹配)
- poj Asteroids (二分匹配之匈牙利算法)
- poj 3041 Asteroids (二分匹配)
- 二分图最大匹配匈牙利算法(poj)3041(模板)
- POJ 3041 Asteroids (二分匹配)
- poj 2226 Muddy Fields 二分匹配匈牙利
- POJ 3041 Asteroids(最大二分匹配)
- 二分图最大匹配(匈牙利算法) POJ 3041 Asteroids
- POJ 3041 (二分匹配->网络最大流)
- Poj1469_匈牙利算法_最大二分匹配
- poj 1719 Shooting Contest 二分匹配 匈牙利
- poj 匈牙利二分匹配 1274 The Perfect Stall
- poj 2594 Treasure Exploration 匈牙利二分匹配+floyd
- poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)
- poj 匈牙利二分匹配 模板 poj题目