Visitors hit counter dreamweaver

poj1274 二分图匹配入门题

   直接套用匈牙利算法就OK了。非常简单,非常适合入门。当时复习匈牙利算法了。好了,图论算法先适可而止吧。。。因为校赛上面不会出得太难的,下一步要去看动态规划和贪心了。。加油加油!!

/*
 * =====================================================================================
 *
 *       Filename:  main.cpp
 *
 *    Description:  poj1274
 *
 *        Version:  1.0
 *        Created:  2012/5/6 11:05:09
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  Jason Damon 
 *   Organization:  XD University
 *
 * =====================================================================================
 */
#include <stdlib.h>
#include <iostream>
#include <fstream>

using namespace std;
#define MAXN 201

int map[MAXN][MAXN],link[MAXN];
bool vist[MAXN];
int n,m,cnt;

int dfs(int x)
{
    int i;
    for(i=1; i<=n; i++)
    {
        if(!vist[i] && map[x][i])
        {
            vist[i]=true;
            if(link[i]==0 || dfs(link[i]))
            {
                link[i]=x;
                return true;
            }
        }
    }
    return false;
}

void Hungary()
{
    int i;
    cnt=0;
    for(i=1; i<=n; i++)
    {
        memset(vist,false,sizeof(vist));
        if(dfs(i))
        {
            cnt++;
        }
    }
}

int main()
{
    int i,j,k,to;
    freopen("in.txt","r",stdin);
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(map,0,sizeof(map));
        memset(link,0,sizeof(link));
        for(i=1; i<=n; i++)
        {
            scanf("%d",&k);
            for(j=1; j<=k; j++)
            {
                scanf("%d",&to);
                map[i][to]=1;
            }
        }
        Hungary();
        printf("%d\n",cnt);
    }
    return 0;
}

 

posted @ 2012-05-06 11:07  Jason Damon  阅读(965)  评论(2编辑  收藏  举报