首页 > 代码库 > poj2239 Selecting Courses --- 二分图最大匹配
poj2239 Selecting Courses --- 二分图最大匹配
匈牙利算法模板题
有n门课程,每门课程可能有不同时间,不同时间的课程等价。
问不冲突的情况下最多能选多少门课。
建立二分图,一边顶点表示不同课程,另一边表示课程的时间(hash一下)。
#include <iostream> #include <cstring> #include <string> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <queue> #include <map> #define inf 0x3f3f3f3f #define eps 1e-6 #define ll __int64 using namespace std; int mp[310][310],used[310],link[310],n,m; bool dfs(int x) { for(int i=1;i<=m;i++) { if(!used[i]&&mp[x][i]) { used[i]=1; if(link[i]==-1||dfs(link[i])) { link[i]=x; return 1; } } } return 0; } int hungry() { int res=0; memset(link,-1,sizeof link); for(int i=1;i<=n;i++) { memset(used,0,sizeof used); if(dfs(i)) res++; } return res; } int main() { int i,a,b; while(~scanf("%d",&n)) { memset(mp,0,sizeof mp); for(i=1;i<=n;i++) { scanf("%d",&m); while(m--) { scanf("%d%d",&a,&b); mp[i][(a-1)*12+b]=1; } } m=7*12; printf("%d\n",hungry()); } return 0; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。