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] 可以 知道 怎样遍历的啦 ^_^
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 300 + 5; 7 bool vis[maxn]; 8 int map[maxn][maxn], match[maxn]; 9 int N, P, cnt; 10 11 int dfs(int x) 12 { 13 for (int i = 1; i <= N; i++) // 为p个课程找匹配,N个学生是候选人 14 { 15 if (!vis[i] && map[x][i]) 16 { 17 vis[i] = 1; 18 if (!match[i] || dfs(match[i])) 19 { 20 match[i] = x; 21 // printf("match[%d] = %d\n", i, match[i]); 22 return 1; 23 } 24 } 25 } 26 return 0; 27 } 28 29 void Hungary() 30 { 31 cnt = 0; 32 for (int i = 1; i <= P; i++) // 不是N,要区分清楚!! 33 { 34 memset(vis, 0, sizeof(vis)); 35 cnt += dfs(i); 36 } 37 } 38 39 int main() 40 { 41 int T, stu_num, stu_id; 42 while (scanf("%d", &T) != EOF) 43 { 44 while (T--) 45 { 46 memset(match, 0, sizeof(match)); 47 memset(map, 0, sizeof(map)); 48 49 scanf("%d%d", &P, &N); 50 for (int i = 1; i <= P; i++) 51 { 52 scanf("%d", &stu_num); 53 for (int j = 0; j < stu_num; j++) 54 { 55 scanf("%d", &stu_id); 56 map[i][stu_id] = 1; 57 } 58 } 59 Hungary(); 60 printf("%s\n", cnt == P ? "YES" : "NO"); 61 } 62 } 63 return 0; 64 }
转载于:https://www.cnblogs.com/windysai/p/3917080.html
poj 1469 COURSES 解题报告相关推荐
- POJ 2745 显示器 解题报告
POJ 2745 显示器 解题报告 编号:2745 考查点:模拟 思路:抽象出来,计算器显示是7个笔画,然后建立数组表示各笔画被覆盖情况,不过这个是我看了书之后实现的,方法果真经典. 提交情况:比 ...
- poj 1469 COURSES
2019独角兽企业重金招聘Python工程师标准>>> COURSES Time Limit: 1000MS Memory Limit: 10000K Total Submissio ...
- poj 1459-Power Network解题报告
链接:http://poj.org/problem?id=1459 网络流的压入重标记算法模板,完全按照算法导论的模式打出来的,没有什么优化之类的,只是为了给自己打模板,要省赛了,加油啊. View ...
- POJ 1002题 解题报告
这个是超时版的: #include<iostream> #include<string> using namespace std; typedef struct Telepho ...
- 利用匈牙利算法Hopcroft-Karp算法解决二分图中的最大二分匹配问题 例poj 1469 COURSES...
首先介绍一下题意:已知,有N个学生和P门课程,每个学生可以选0门,1门或者多门课程,要求在N个学生中选出P个学生使得这P个学生与P门课程一一对应. 这个问题既可以利用最大流算法解决也可以用匈牙利算法解 ...
- POJ - 1469 COURSES (匈牙利算法入门题)
题意: P门课程,N个学生.给出每门课程的选课学生,求是否可以给每门课程选出一个课代表.课代表必须是选了该课的学生且每个学生只能当一门课程的. 题解: 匈牙利算法的入门题. #include < ...
- POJ 1469 COURSES 二分图最大匹配
就是判断一下是不是每一个课程都能找到自己的代表人,做一遍最大匹配看看匹配数是否等于p即可 #include <cstdio> #include <cstring> #inclu ...
- POJ 2240 Arbitrage 解题报告
Question Link 单向图,就是bellman-ford求正环,但是应该预设起点的钱的值为1,或者任意正数.起点暴力,枚举.好吧(其实我是真的傻了). 傻傻的代码 #include<io ...
- POJ 2800 垂直直方图 解题报告
POJ 2800 垂直直方图 解题报告 编号:2800 考查点:简单计算题 思路: 用gets()读入4行数据,然后按字符统计,显示的时候有点小处理即可. 提交情况: 感觉POJ的测试数据有点骗人 ...
最新文章
- php excel 追加写入,phpexcel写入追加已有的excel文件
- autofs一个神奇的服务
- 61 MM配置-后勤发票校验-发票冻结-设置容差限制
- 【UVALive】3029 City Game(悬线法)
- Memcached学习---(1) 教程
- 单个字段中根据条件剔除数据
- linux 核显驱动程序,在Ubuntu系统上安装英特尔核显驱动安装器的方法
- 01 Conv-TasNet论文分享
- 三大突破让人工智能终成现实
- 良心推荐:最适合玩吃鸡手游的安卓机型有哪些?刺激战场为例
- pwm调速流程图小车_求智能小车 PWM调速?
- [转载] 百科全说——陈焕然:揭秘高科技美容(10-02-22)
- 可以旅游了_原水_新浪博客
- 1024,祝所有程序员节日快乐
- 基于python+vue+elementUI高校社团管理系统(前后端分离)#毕业设计
- go-gorilla的ping pong
- 第0章 计算机硬件与组成基础
- 女工程师独家揭秘:双11秘密武器阿里云数据库团队故事
- 2021/8/13 又回到最初的起点
- 怎么提高网站的流量 做好这10点