Shirlies
宁静专注认真的程序媛~

以下内容如有问题,还望大家提出意见来,大家一起进步^_^

以下为二分图的模板
void init()
{
 memset(link,-1,sizeof(link));//初始化链接的点为-1
 for(int i = 0;i < n;i ++)//是用vector存储图的点之间的关系的
 {
  pro[i].clear();
 }
}

bool can(int x)//寻找二分图的增广路
{
 int len = pro[x].size();
 for(int i = 0;i < len;i ++)
 {
  int t = pro[x].at(i);
  if(!vis[t])
  {
   vis[t] = 1;
   if(link[t] == -1 || can(link[t]))//当前点还没有匹配或者当前点可以找到其他的匹配点,就与x匹配
   {
    link[t] = x;
    return true;
   }
  }
 }

 return false;
}

int maxmatch()
{
 int num = 0;
 for(int i = 0;i < n;i ++)
 {
  memset(vis,0,sizeof(vis));//在这儿批量赋值
  if(can(i))//找到增广路就加一
  {
   num ++;
  }
 }

 return num;//获得匹配的点的数目
}
最大独立点=点数-最大匹配数 hdu Girls and Boys
最小点覆盖=匹配数  hdu Strategic Game
最小路径覆盖=点数-最大匹配数 hdu Air Raid

二分图匹配的模板是固定的,但是要将一些题目要细细分析,分解成二分图模型,就好用二分图了
hdu Machine Schedule简单的二分图匹配,但是要注意题目中的细节“At the beginning they are both work at mode_0”

hdu Uncle Tom's Inherited Land*是有点变形的二分图匹配,如果能够想到是二分图匹配应该可以做出来-----我的博客上面有

hdu Card Game Cheater只是二分图匹配+字符串处理,我的博客上面有

hdu 棋盘游戏 这一题有点转弯,我是模仿别人写的,之前思路出问题了,看了别人的代码才明白------代码我的博客上面有

hdu Cat vs. Dog有点转弯,需要拿人来匹配,喜欢A的人和讨厌A的人匹配,求最大独立点 ------博客上面有


 

posted on 2012-05-23 12:55  Shirlies  阅读(193)  评论(0编辑  收藏  举报