题目意思:
一天12节课,一个星期七天。有n中课程,每种课程只要上m[i]节课的一节就可以了,求最多能上多少节课?
解题思路:这是一道典型的求二分图的最大匹配问题,用匈牙利算法解决。
代码:
#include<iostream>
using namespace std;
int a[500][100],match[500],n,m=84,che[500];
int dfs(int k)
{
int i,t;
for(i=1;i<=m;i++)
{
if(!che[i]&&a[k][i])
{
t=match[i];match[i]=k;che[i]=1;
if(t==-1||dfs(t)) return 1;
match[i]=t;
}
}
return 0;
}
int maxflow()
{
int i,ans=0;
for(i=1;i<=n;i++)
{
memset(che,0,sizeof(che));
if(dfs(i)) ans++;
}
return ans;
}
int main()
{
int i,j,k,d,c;
while(cin>>n)
{
memset(a,0,sizeof(a));
memset(match,-1,sizeof(match));
for(i=1;i<=n;i++)
{
cin>>k;
for(j=0;j<k;j++)
{
cin>>d>>c;
a[i][(d-1)*12+c]=1;
}
}
cout<<maxflow()<<endl;
}
return 0;
}