二分图之最小边覆盖(poj3020)

题目:poj3020


题意:给出一个图,让你用最少的1*2的纸片覆盖掉图中的所有*出现过的地方。基本裸的最小边覆盖。


分析:

最小边覆盖 = 点总数 - 最大匹配

所以就是转化为求最大匹配。


跟前面一道题目很相似,也是相同的建图方法,奇偶性建图。


#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
const int N = 1200;
#define Del(x,y) memset(x,y,sizeof(x))
int map[N][N],link[N],vis[N],vlink[N];
char path[50][50];
int line[50][50];
int n,m,t,tmp1,tmp2;
bool dfs(int x)
{
    for(int i=1; i=1)
                        map[line[i-1][j]][line[i][j]]=1;
                    if(line[i+1][j]>=1)
                        map[line[i+1][j]][line[i][j]]=1;
                    if(line[i][j-1]>=1)
                        map[line[i][j-1]][line[i][j]]=1;
                    if(line[i][j+1]>=1)
                        map[line[i][j+1]][line[i][j]]=1;
                }
            }
        }
        solve();
    }
    return 0;
}


你可能感兴趣的:(图论)