POJ 3041 Asteroid (二分匹配模板-二分图最小覆盖)
2013-05-06 17:44
309 查看
这道题题是很经典的建模的题目,也是比较基础的二分匹配题目。
二分最小覆盖就是说选择尽可能少的点,然后使得每条边至少有一个端点被选中。可以证明的是最小覆盖数就是最大匹配数。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int n, k;
int g
, cy
;
bool used
;
bool dfs( int u )
{
for ( int v = 1; v <= n; ++v ) if ( g[u][v] && !used[v] ) {
used[v] = 1;
if ( cy[v] == -1 || dfs( cy[v] ) ) {
cy[v] = u;
return 1;
}
}
return false;
}
int match()
{
int res = 0;
memset(cy, -1, sizeof(cy));
for ( int i = 1; i <= n; ++i ) {
memset( used, 0, sizeof(used));
if ( dfs(i) ) res++;
}
return res;
}
int main()
{
while ( scanf("%d%d",&n, &k) == 2 ) {
memset(g, 0, sizeof(g));
while ( k-- ) {
int u, v;
scanf("%d%d", &u, &v);
g[u][v] = 1;
}
printf("%d\n", match());
}
}
二分最小覆盖就是说选择尽可能少的点,然后使得每条边至少有一个端点被选中。可以证明的是最小覆盖数就是最大匹配数。
代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int n, k;
int g
, cy
;
bool used
;
bool dfs( int u )
{
for ( int v = 1; v <= n; ++v ) if ( g[u][v] && !used[v] ) {
used[v] = 1;
if ( cy[v] == -1 || dfs( cy[v] ) ) {
cy[v] = u;
return 1;
}
}
return false;
}
int match()
{
int res = 0;
memset(cy, -1, sizeof(cy));
for ( int i = 1; i <= n; ++i ) {
memset( used, 0, sizeof(used));
if ( dfs(i) ) res++;
}
return res;
}
int main()
{
while ( scanf("%d%d",&n, &k) == 2 ) {
memset(g, 0, sizeof(g));
while ( k-- ) {
int u, v;
scanf("%d%d", &u, &v);
g[u][v] = 1;
}
printf("%d\n", match());
}
}
相关文章推荐
- poj 3041 二分图最大匹配(最小点覆盖问题)
- poj-3041-Asteroids【二分匹配&&最小顶点覆盖】
- POJ 3041 Asteroids【二分图最大匹配.最小点覆盖】
- poj 3041 Asteroids -二分匹配-最小顶点覆盖
- POJ 3041 Asteroids 最小点覆盖 == 二分图的最大匹配
- poj 3041 Asteroids (二分图最大匹配 == 最小点覆盖数)
- POJ 3041 Asteroids 二分匹配 最小点覆盖
- poj 3041(最小点覆盖及二分图的最大匹配)
- poj 3041 Asteroids(二分图 *【矩阵实现】【最小点覆盖==最大匹配数】)
- POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配)
- poj 3041 Asteroids(二分匹配,最小点覆盖)
- POJ 3041-Asteroids(二分匹配_最小点覆盖)
- poj 3041 Asteroids 最小顶点覆盖 && 二分匹配
- POJ 3041 匈牙利算法 最小覆盖 最大二分匹配
- poj 3041 Asteroids (最大匹配最小顶点覆盖——匈牙利模板题)
- POJ训练计划3041_Asteroids(二分图/最小点覆盖=最大匹配)
- POJ 3041 Asteroids 最小点覆盖==最大二分匹配
- poj 3041 二分图最大匹配 最小点覆盖
- (模板题)poj 3041 Asteroids(二分图的最大匹配匈牙利算法)
- POJ 1325 Machine Schedule (最小点覆盖 && 二分图最大匹配)