首页 > 代码库 > poj 1469 COURSES 解题报告
poj 1469 COURSES 解题报告
题目链接:http://poj.org/problem?id=1469
题目意思:略
for 循环中遍历的对象要特别注意,究竟是遍历课程数P 还是 学生数N,不要搞混!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 6 const int maxn = 300 + 5; 7 int match[maxn], map[maxn][maxn]; 8 int vis[maxn]; 9 int P, N, cnt;10 11 int dfs(int x)12 {13 for (int i = 1; i <= N; i++) // 遍历学生数14 {15 if (!vis[i] && map[x][i])16 {17 vis[i] = 1;18 if (match[i] == 0|| dfs(match[i]))19 {20 match[i] = x;21 return 1;22 }23 }24 }25 return 0;26 }27 28 void Hungary()29 {30 cnt = 0;31 for (int i = 1; i <= P; i++) // 遍历课程数32 {33 memset(vis, 0, sizeof(vis));34 cnt += dfs(i);35 }36 }37 38 int main()39 {40 int T, num, stu_num;41 while (scanf("%d", &T) != EOF)42 {43 while (T--)44 {45 memset(match, 0, sizeof(match));46 memset(map, 0, sizeof(map));47 48 scanf("%d%d", &P, &N);49 for (int i = 1; i <= P; i++)50 {51 scanf("%d", &num);52 for (int j = 1; j <= num; j++)53 {54 scanf("%d", &stu_num);55 map[i][stu_num] = 1;56 }57 }58 Hungary();59 printf("%s\n", cnt == P ? "YES" : "NO");60 }61 }62 return 0;63 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。