【HDU 2063】【二分图最大匹配】过山车

  折腾了一晚上就弄了一个这个。。明天的实验室的题还没出,后天还有和朋友相约VOJ,周六还要BC签到。 啊啊啊啊还有好多东西要学,这周结束数据结构。 

  本来想看啊哈算法的,发现好烦啊,直接做一题基础题,看了Dark_Scope大牛的趣写算法—匈牙利算法,默默的A了一题,有个印象。

  明天结合数据结构看看。 然后就是一开始把line初始化为-1.。。结果WAWAWAWA。。。false的值是0000000!!!!荒废我一个晚上!!

#include "iostream"
#include "cmath"
#include "algorithm"
using namespace std;
#define Max 1000
int boy[Max];
bool line[Max][Max];
bool used[Max];
int num,gnum,bnum;
int find (int x);
int main(int argc, char const *argv[])
{
  while(~scanf("%d",&num) && num)
  {
    scanf("%d %d",&gnum,&bnum);
    memset(line,false,sizeof(line));
    memset(boy,-1,sizeof(boy));
    int ans=0;
    for (int i = 1; i <= num; ++i)
    {
      int a,b;
      scanf("%d %d",&a,&b);
      line[a][b]=true;
    }
    for (int i = 1; i <= gnum; ++i)//0搜索就会错的,这边是从1个人开始到最后一个人,下面同理
    {
      memset(used,false,sizeof(used));
      if(find(i)) ans++; //是不是这里错了不能a
    }
    printf("%d\n",ans);
  }
  return 0;
}
int find(int x)
{
  for (int i = 1; i <= bnum; ++i)//这边要开等号。
  {
    if(!used[i] && line[x][i])
    {
      used[i]=true;
      if(boy[i] == -1 || find(boy[i]))//该男生是单身狗 或者 为了最大匹配女生找其他男生   
      {
        boy[i] = x;//男生i和女生x在一起
        return 1;  
      } 
    }
  }
  return 0;
}

你可能感兴趣的:(数据结构,c,二分图)