POJ 3692 Kindergarten ( 最大独立点集 )
2013-05-07 21:04
253 查看
这道题是求最大独立点集!
最大独立点集=N - 最小顶点覆盖=N-最大匹配。
反建图,将不认识的连上边!
代码:
#include <cstdio>
#include <cstring>
const int N = 220;
int ln, rn, M;
int bmap
, cy
;
bool used
;
bool dfs( int u )
{
for ( int v = 1; v <= rn; ++v ) if ( bmap[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 <= ln; ++i ) {
memset( used, 0, sizeof(used));
if ( dfs(i) ) res++;
}
return res;
}
int main()
{
int icase = 1;
while ( scanf("%d%d%d", &ln, &rn, &M) == 3 && M+ln+rn ) {
for ( int i = 0; i <= ln; ++i )
for ( int j = 0; j <= rn; ++j ) bmap[i][j] = 1;
while ( M-- ) {
int u, v;
scanf("%d%d", &u, &v);
bmap[u][v] = 0;
}
printf("Case %d: %d\n", icase++, ln+rn-match());
}
}
最大独立点集=N - 最小顶点覆盖=N-最大匹配。
反建图,将不认识的连上边!
代码:
#include <cstdio>
#include <cstring>
const int N = 220;
int ln, rn, M;
int bmap
, cy
;
bool used
;
bool dfs( int u )
{
for ( int v = 1; v <= rn; ++v ) if ( bmap[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 <= ln; ++i ) {
memset( used, 0, sizeof(used));
if ( dfs(i) ) res++;
}
return res;
}
int main()
{
int icase = 1;
while ( scanf("%d%d%d", &ln, &rn, &M) == 3 && M+ln+rn ) {
for ( int i = 0; i <= ln; ++i )
for ( int j = 0; j <= rn; ++j ) bmap[i][j] = 1;
while ( M-- ) {
int u, v;
scanf("%d%d", &u, &v);
bmap[u][v] = 0;
}
printf("Case %d: %d\n", icase++, ln+rn-match());
}
}
相关文章推荐
- Poj 3692 Kindergarten 二分图最大独立点集
- POJ 3692 - Kindergarten 二分图的最大独立点集
- poj 3692 Kindergarten(最大独立点集 + 二分图最大匹配)
- POJ 3692 二分图最大独立点集
- poj3690——Kindergarten(最大独立点集,匈牙利算法)
- poj 3692 最大独立点集
- POJ - 3692 Kindergarten 二分图 最大匹配
- poj1466——Girls and Boys(最大独立点集)
- POJ 3692 Kindergarten (二分图 最大团)
- POJ Girls and Boys (最大独立点集)
- POJ 3692 Kindergarten(最大团问题)
- POJ 3692 Kindergarten(最大独立集)
- poj 3692 Kindergarten(二分图匹配,最大独立集)
- poj 3692 Kindergarten(最大团,二分图匹配)
- POJ 3692 Kindergarten (二分图 最大团)
- POJ 3692 Kindergarten(最大独立集)
- POJ 1466 Girls and Boys(最大独立点集)
- poj 3692 Kindergarten (最大独立集之逆匹配)
- POJ 3692 Kindergarten 最大团->最大独立集
- poj 3692 Kindergarten (最大独立集)