hdu1150

二分图最大匹配的模板体,套模板就过了,但是很坑爹有木有,那个i根本没有用

#include<stdio.h>
#include<string.h>
 bool map[501][501];
 int mark[501];
 bool flag[501];
 int k,g,m;

 void get_map()
{
    int i,x,y;
   for(i=0;i<k;i++)
   {
        int tt;
      scanf("%d%d%d",&tt, &x,&y);
      map[x][y]=1;
   }
}

bool dfs(int x)
{
    int i;
   for(i=1;i<=m;i++)
   {
      if(!map[x][i]||flag[i])
          continue;
         flag[i]=1;
      if(!mark[i]||dfs(mark[i]))//i点为孤立点,或者i不是孤立点时寻找i所对应的女生的增广路,如果那个女生能找到另一条增广路径
      {
         mark[i]=x;           //就可以使i变成孤立点,从而使增广路径的长度加1,此处的dfs(mark[i])就是找i对应的女生能否有另
         return 1;            //一条不包含i的增广路径,而mark[]是用来判断是否是孤立点的。
      }

   }
   return 0;
}

void solve()
{
   int    i,count=0;
    memset(mark,0,sizeof(mark));//记录女孩i对应的男孩//
   for(i=1;i<=g;i++)
   {
      memset(flag,0,sizeof(flag));//标记是否被访问过//
      if(dfs(i))
      {
          count++;
      }
   }
   printf("%d\n",count);
}


int main()
{
  freopen("sbin.txt", "r", stdin);
    while(scanf("%d",&k)&&k!=0)
    {
        scanf("%d%d",&g,&m);
        memset(map,0,sizeof(map));
       get_map();
       solve();
    }
   return 0;
}
View Code

 

posted on 2013-12-02 19:31  Arthas0v0  阅读(151)  评论(0编辑  收藏  举报

导航