首页 > 代码库 > poj-1469-COURSES-二分图匹配-匈牙利算法(模板)
poj-1469-COURSES-二分图匹配-匈牙利算法(模板)
题意:N个学生,P个课程,问能不能找到课程的P个匹配。
思路:【早上睡醒了再写】
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 const int maxn = 555; 7 int n, p; 8 vector<int> g[maxn]; 9 int from[maxn], tot;10 bool use[maxn];11 12 bool match(int x)13 {14 for (int i = 0; i < g[x].size(); i ++) {15 if(!use[g[x][i]]) {16 use[g[x][i]] = true;17 if(from[g[x][i]] == -1 || match(from[g[x][i]])) {18 from[g[x][i]] = x;19 return true;20 }21 }22 }23 return false;24 }25 26 int hungary()27 {28 tot = 0;29 memset(from, -1, sizeof(from));30 for(int i = 1; i <= n; i ++) {31 memset(use, 0, sizeof(use));32 if(match(i)) tot ++;33 }34 return tot;35 }36 37 int main()38 {39 int t; cin>>t;40 while(t--) {41 for(int i = 0; i < maxn; i++) g[i].clear();42 scanf("%d%d", &p, &n);43 for(int i = 1; i <= p; i++) {44 int k; scanf("%d", &k);45 for(int j = 0; j < k; j++) {46 int a; scanf("%d", &a);47 g[i].push_back(a);48 }49 }50 int res = hungary();51 //cout<<res<<endl;52 if(res == p) printf("YES\n");53 else printf("NO\n");54 }55 }
poj-1469-COURSES-二分图匹配-匈牙利算法(模板)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。