您的位置:首页 > 其它

poj2239 Selecting Courses解题报告

2012-07-05 23:20 211 查看
题目意思:

一天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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: