poj 1469 || hdu 1083 Courses (二分图匹配)
来源:互联网 发布:网络剪刀手win7中文版 编辑:程序博客网 时间:2024/05/29 21:28
题目链接: hdu 1083
题目大意: 给你N种课程和M个学生,每个学生有自己喜欢的课程
若每个课程都能有一个学生代表输出YES,否则NO
解题思路: 把课程作为X集合,学生作为Y集合
匈牙利求他们之间的最大匹配数
若最大匹配数等于课程数(不可能大于的),则满足题意
每种课程都有学生作为代表
代码:
#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 505int edge[105][MAX];int P,n,cx[105],cy[MAX],visit[MAX];int DFS(int u) //匈牙利DFS增广{ int i; for(i=1;i<=n;i++) { if(edge[u][i]&&!visit[i]) { visit[i]=1; if( !cy[i] || DFS(cy[i]) ) { cx[u]=i; cy[i]=u; return 1; } } } return 0;}int main(){ int t,i,j,a,b,sum; scanf("%d",&t); while(t--) { scanf("%d%d",&P,&n); sum=0; memset(cx,0,sizeof(cx)); memset(cy,0,sizeof(cy)); memset(edge,0,sizeof(edge)); for(i=1;i<=P;i++) { scanf("%d",&a); for(j=1;j<=a;j++) { scanf("%d",&b); edge[i][b]=1; //单向边 } } for(i=1;i<=P;i++) {if(!cx[i]){ memset(visit,0,sizeof(visit)); sum+=DFS(i); //增广轨} } if(sum==P) //若最大匹配数等于课程数输出YES printf("YES\n");else printf("NO\n"); } return 0;}
- poj 1469 || hdu 1083 Courses (二分图匹配)
- poj 1469 COURSES 二分图匹配初识
- poj 1469 COURSES 二分图匹配
- POJ 1469 二分图最大匹配 COURSES
- POJ 1469 COURSES(二分图最大匹配)
- COURSES - POJ 1469 二分图匹配
- 【二分图|最大匹配】POJ-1469 COURSES
- poj 1469 COURSES 二分图最大匹配
- poj 1469 COURSES (二分图匹配)
- POJ 1469 COURSES(二分图匹配)
- POJ 1469 COURSES(二分图最大匹配)
- POJ 1469 COURSES(最大二分图匹配)
- POJ-1469 COURSES(二分图最大匹配)
- hdu 1083 Courses (二分图匹配)
- hdu 1083 Courses 二分图最大匹配
- hdu 1083 Courses(二分图匹配)
- HDU 1083 Courses(二分图匹配)
- hdu 1083 Courses(二分图最大匹配)
- JSF select One/Many
- struts2文件上传与下载
- 5.MIL中视频加载、播放和保存
- Sort List (大的还没跑通)
- DLL封装
- poj 1469 || hdu 1083 Courses (二分图匹配)
- 第一个c项目
- Java技术学习路线
- ubuntu13.10安装jdk
- 黑马程序员——内省、类加载器、动态代理
- VC++文件夹的创建和文件夹的删除总结
- iBatis中的重要接口SqlMapClient
- Spring+Ibatis集成开发实例
- Servlet 3.0笔记之超方便的文件上传支持