POJ 1469 COURSES(二分图最大匹配)
来源:互联网 发布:淘宝网站结构图 编辑:程序博客网 时间:2024/06/06 04:55
题意:有P门课和N个学生,每门课可能有0个或多个学生选修想选.现在问你能不能找到一种选课方案,使得P门课每门课都正好只有1个学生选修,且任意两个选了课的学生所选的课都不同?
思路:显然的二分图匹配,该图可以看成是左边有P个点,右边有N个点的二分图.又由于我们想使得课与学生连的边最多且每个学生只能连一门课,每门课也只能有一个学生连接(即每个学生或每门课最多只有一条边依附).所以这就是一个匹配问题且是最大匹配.现在要求这个图的最大匹配,看看能否该最大匹配边数目==P.
#include<cstdio>#include<cstring>#include<vector>using namespace std;const int maxn=500+10;struct Max_Match{ int n,m; vector<int> g[maxn]; bool vis[maxn]; int left[maxn]; void init(int n,int m) { this->n=n; this->m=m; for(int i=1;i<=n;i++) g[i].clear(); memset(left,-1,sizeof(left)); } bool match(int u) { for(int i=0;i<g[u].size();i++) { int v=g[u][i]; if(!vis[v]) { vis[v]=true; if(left[v]==-1 || match(left[v])) { left[v]=u; return true; } } } return false; } int solve() { int ans=0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(match(i)) ans++; } return ans; }}MM;int T;int main(){ int k,n,m;scanf("%d",&T); while(T--) {scanf("%d%d",&n,&m);MM.init(n,m);int flag = 1; for (int i = 1;i<=n;i++) { scanf("%d",&k); if (k){while (k--){int j; scanf("%d",&j); MM.g[i].push_back(j);}}elseflag = 0; }if (flag) printf("%s\n",MM.solve()==n?"YES":"NO");elseprintf("NO\n"); } return 0;}
0 0
- POJ 1469 二分图最大匹配 COURSES
- POJ 1469 COURSES(二分图最大匹配)
- 【二分图|最大匹配】POJ-1469 COURSES
- poj 1469 COURSES 二分图最大匹配
- POJ 1469 COURSES(二分图最大匹配)
- POJ 1469 COURSES(最大二分图匹配)
- POJ-1469 COURSES(二分图最大匹配)
- poj 1469 COURSES (二分图最大匹配)
- poj 1469 COURSES 二分图最大匹配数
- POJ 1469 COURSES (二分图最大匹配 匈牙利算法)
- poj 1469 COURSES 二分图最大匹配 匈牙利算法
- POJ 1469 && ZOJ 1140 --COURSES【二分图 && 最大匹配】
- POJ 1469 COURSES(匈牙利算法二分图最大匹配)
- poj 1469 COURSES 二分图匹配初识
- poj 1469 COURSES 二分图匹配
- COURSES - POJ 1469 二分图匹配
- poj 1469 COURSES (二分图匹配)
- POJ 1469 COURSES(二分图匹配)
- 华为机试题:输入整型数组和排序标识,对其元素按照升序或降序进行排序
- 腾讯的职级系统 梁宁-闲花照水录
- Java中实现反盗链Filter
- Appium环境搭建步骤 For Mac
- http协议笔记
- POJ 1469 COURSES(二分图最大匹配)
- 产品经理的段位——说说腾讯的产品职级 梁宁-闲花照水录
- Arduino代码机制-avr/pgmspace.h
- Codeforces Round #287 (Div. 2) C. Guess Your Way Out!(线段树思想)
- Python yield 使用浅析
- Android Wear 进阶 - 1 Notification
- 移动端第三方登录(微信)java验证并获取用户信息
- 326. Power of Three
- fluentd收集mapreduce分布式环境下的用户日志