poj 1469 COURSES 解题报告
题目链接:http://poj.org/problem?id=1469
题目意思:有 N 个人,P个课程,每一个课程有一些学生参加(0个、1个或多个参加)。问 能否使得 P 个课程 恰好与 P 个学生相匹配。
受之前第一道匹配题(POJ 1274 The Perfect Stall)的影响,没有仔细体会是从哪个点匹配到哪个点,这将导致Hungary() 和 dfs() 中 for 循环的约束条件,究竟是遍历课程数 P 还是 学生数N,不要搞混!其实从存储的map[i][j] 可以 知道 怎样遍历的啦 ^_^
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; const int maxn = + ;
bool vis[maxn];
int map[maxn][maxn], match[maxn];
int N, P, cnt; int dfs(int x)
{
for (int i = ; i <= N; i++) // 为p个课程找匹配,N个学生是候选人
{
if (!vis[i] && map[x][i])
{
vis[i] = ;
if (!match[i] || dfs(match[i]))
{
match[i] = x;
// printf("match[%d] = %d\n", i, match[i]);
return ;
}
}
}
return ;
} void Hungary()
{
cnt = ;
for (int i = ; i <= P; i++) // 不是N,要区分清楚!!
{
memset(vis, , sizeof(vis));
cnt += dfs(i);
}
} int main()
{
int T, stu_num, stu_id;
while (scanf("%d", &T) != EOF)
{
while (T--)
{
memset(match, , sizeof(match));
memset(map, , sizeof(map)); scanf("%d%d", &P, &N);
for (int i = ; i <= P; i++)
{
scanf("%d", &stu_num);
for (int j = ; j < stu_num; j++)
{
scanf("%d", &stu_id);
map[i][stu_id] = ;
}
}
Hungary();
printf("%s\n", cnt == P ? "YES" : "NO");
}
}
return ;
}
poj 1469 COURSES 解题报告的更多相关文章
- POJ 1274 The Perfect Stall || POJ 1469 COURSES(zoj 1140)二分图匹配
两题二分图匹配的题: 1.一个农民有n头牛和m个畜栏,对于每个畜栏,每头牛有不同喜好,有的想去,有的不想,对于给定的喜好表,你需要求出最大可以满足多少头牛的需求. 2.给你学生数和课程数,以及学生上的 ...
- poj 1469 COURSES(匈牙利算法模板)
http://poj.org/problem?id=1469 COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- POJ 2002 Squares 解题报告(哈希 开放寻址 & 链式)
经典好题. 题意是要我们找出所有的正方形.1000点,只有枚举咯. 如图,如果我们知道了正方形A,B的坐标,便可以推测出C,D两点的坐标.反之,遍历所有点作为A,B点,看C,D点是否存在.存在的话正方 ...
- 【原创】poj ----- 1182 食物链 解题报告
题目地址: http://poj.org/problem?id=1182 题目内容: 食物链 Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ 1469 COURSES 二分图最大匹配 二分图
http://poj.org/problem?id=1469 这道题我绝壁写过但是以前没有mark过二分图最大匹配的代码mark一下. 匈牙利 O(mn) #include<cstdio> ...
- poj 2051.Argus 解题报告
题目链接:http://poj.org/problem?id=2051 题目意思:题目有点难理解,所以结合这幅图来说吧---- 有一个叫Argus的系统,该系统支持一个 Register 命令,输入就 ...
- poj 1102.LC-Display 解题报告
题目链接:http://poj.org/problem?id=1102 题目意思:就是根据给出的格式 s 和 数字 n,输出数值 n 的 LCD 显示.数值 n 的每个数字要占据 s + 2 列 和 ...
- POJ 1469 COURSES
COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 20478 Accepted: 8056 Descript ...
- poj 1363 Rails 解题报告
题目链接:http://poj.org/problem?id=1363 题意:有一列火车,车厢编号为1-n,从A方向进站,向B方向出站.现在进站顺序确定,给出一个出站的顺序,判断出站顺序是否合理. 实 ...
随机推荐
- 洛谷 [P2575] 高手过招
SG函数+状压记忆化搜索 观察题目发现,每一行都是独立的,只要处理出来每一行的SG值,异或起来就好 每一行的SG值可以用状压+记忆化搜索的方法来求,对位运算技术是个很大的考验 注意SG值要预处理出来, ...
- Codeforces Round #275 (Div. 2) B. Friends and Presents 二分+数学
8493833 2014-10-31 08:41:26 njczy2010 B - Friends and Presents G ...
- msp430项目编程34
msp430中项目---flash编程34 1.电路工作原理 2.代码(显示部分) 3.代码(功能实现) 4.项目总结
- django搭建开发环境
1.安装python,安装pip,添加环境变量 2.使用虚拟环境Virtualenv,下载virtualenv解压,进入到此目录,cmd运行python setup.py install(或直接打开c ...
- django学习之- simple_tag
如何将前端的数据直接通过python模块进行渲染,使用django的simple_tag功能,如下 django后端编写: 1:在对应的app目录下创建目录:templatetags 2:在templ ...
- 数据结构之区间K大数
求区间的问题有很多类,虽然前人有很多讲解了: 但是我在这里在普及一下,算是自己的一种复习吧. 1.静态询问一个区间的的第k大数,比如询问[l,r] k大数.虽然主席树可以处理,但是这类问题应该是划分树 ...
- noip2013华容道
题目描述 [问题描述] 小 B 最近迷上了华容道,可是他总是要花很长的时间才能完成一次.于是,他想到用编程来完成华容道:给定一种局面, 华容道是否根本就无法完成,如果能完成, 最少需要多少时间. 小 ...
- Codeforces 616 E Sum of Remainders
Discription Calculate the value of the sum: n mod 1 + n mod 2 + n mod 3 + ... + n mod m. As the resu ...
- spark与Scala安装过程和步骤及sparkshell命令的使用
Spark与Scala版本兼容问题: Spark运行在Java 8 +,Python 2.7 + / 3.4 +和R 3.1+上.对于Scala API,Spark 2.4.2使用Scala 2.12 ...
- Java面向对象练习题
1.猜数字游戏: 一个类A有两个成员变量v.num,v有一个初值100. 定义一个方法guess,对A类的成员变量v,用num进行猜. 如果大了则提示大了,小了则提示小了.等于则提示猜测成功. 在ma ...