读书人

poj2239 Selecting Courses(最大二分图

发布时间: 2012-10-10 13:58:11 作者: rapoo

poj2239 Selecting Courses(最大二分图匹配 (匈牙利算法) 实现 )

#include<iostream>#include<cstdio>#include<cstring>#include<vector>#define MAXSIZE 205#define sf scanf#define pf printf#define __int64 long long#define INF 0xfffffff#include<queue>using namespace std;int map[MAXSIZE][MAXSIZE];int vis[MAXSIZE],link[MAXSIZE];int n1,n2=84;bool MaxMatch(int x){    for(int i=0;i<n2;i++)    {        if(map[x][i]&&!vis[i])        {            vis[i]=1;            if(link[i]==-1||MaxMatch(link[i]))            {                link[i]=x;                return true;            }        }    }    return false;}int main(){    while(~sf("%d",&n1))    {        memset(link,-1,sizeof(link));        memset(map,0,sizeof(map));        int t;        for(int i=0;i<n1;i++)        {            sf("%d",&t);            int u,v;            for(int j=0;j<t;j++)            {                sf("%d%d",&u,&v);                map[i][(u-1)*12+v-1]=1;            }        }        int sum=0;        for(int i=0;i<n1;i++)        {            memset(vis,0,sizeof(vis));            if(MaxMatch(i))            sum++;        }        cout<<sum<<endl;    }}


读书人网 >编程

热点推荐