二分匹配 HDU1469 COURSES
来源:互联网 发布:物流软件供应商 编辑:程序博客网 时间:2024/05/17 07:49
HDU1469 COURSES
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=17820
题意:一些课程给定能参加的学生名单,问是否有一种分配让每个课程都有一名不同的学生参加。
思路:二分模板题。通过search函数递归寻找是否存在增广路,若存在则标记点并匹配值加1。本题错误点是n和p的输入输反我也是醉了。
源码:
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include <iostream>
using namespace std;
int const MAXN = 300+10;
int edge[MAXN][MAXN],use[MAXN],lin[MAXN];
int n,p,ans;
void init()
{
memset(edge,0,sizeof(edge));
memset(use,0,sizeof(use));
memset(lin,-1,sizeof(lin));
int i,j,k,tot,tt;
for(i=0; i<p; i++){
scanf("%d",&tot);
while(tot--){
scanf("%d",&tt);
edge[i][tt-1] = 1;
}
}
}
bool search(int a)
{
int i,j,k;
for(i=0; i<n; i++){
if(edge[a][i]==1 && use[i]==0){
use[i] = 1;
if(lin[i]==-1 || search(lin[i])){
// printf("lin = %d, a = %d\n",lin[i],a);
lin[i] = a;
return true;
}
}
}
return false;
}
void solve()
{
int i,j,k;
ans = 0;
for(i=0; i<p; i++){
memset(use,0,sizeof(use));
if(search(i))
ans++;
}
// printf("\nlin = \n");
// for(i=0; i<n; i++)
// printf("%d ",lin[i]);
}
void check()
{
printf("\nedge is \n");
int i,j;
for(i=0; i<p; i++){
for(j=0; j<n; j++)
printf("%d ",edge[i][j]);
printf("\n");
}
}
int main()
{
int t;
scanf("%d",&t);
for(int i=1; i<=t; i++){
scanf("%d%d", &p, &n);
init();
// check();
solve();
if(ans == p)
printf("YES\n");
else
printf("NO\n");
}
return 0;
}
- 二分匹配 HDU1469 COURSES
- 二分匹配 Selecting Courses
- 【二分匹配】 hdu1083 Courses
- Courses(二分图匹配)
- 【二分匹配】HDU1083-Courses
- HDU1083 Courses 二分匹配
- pku 1469 COURSES(二分匹配)
- HDU 1083 二分匹配 Courses
- TOJ 1050 Courses 二分匹配
- [toj1050]【二分图匹配】Courses
- poj 1469 COURSES 【二分匹配】
- hdu1083 Courses(二分匹配)
- poj 1469 COURSES (二分匹配)
- Courses HDU1083 -二分图匹配
- HDU1083 Courses(二分图匹配)
- poj1469 COURSES【二分图匹配】
- HDU-1083-Courses [二分匹配]
- 2239 Selecting Courses 二分图匹配
- php与memcached服务器交互的分布式实现源码分析
- 我的Nexus4终于升级到了android5.1了
- test
- 新购物时代:购物场景与场景购物
- 购物车类-未完成
- 二分匹配 HDU1469 COURSES
- Android studio 出现错误Androidmanifest xml does not exist or has incorrect root tag
- 单元测试入门+junit4介绍+简单小实例
- Android之Fragment的使用(一)
- shell脚本编程入门
- 八大内部排序算法(上)-冒泡、直接插入、简单选择、快速
- hbase安装
- 合伙创业,合的不是钱,而是格局!推荐!
- bash环境:内置命令与外部命令