二分图匹配——POJ - 1469
Posted helman
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分图匹配——POJ - 1469相关的知识,希望对你有一定的参考价值。
题目含义
每门课有几名同学参加,要求每门课选一个代表,当然代表只能由参加这门课的学生中选,并且一个人只能当一门课的代表
题目分析
二分图匹配,是课程去找一个同学与它匹配,如果每门课都匹配上了就输出yes,否则no
题目代码
#include<stdio.h> #include<iostream> #include<string.h> using namespace std; const int maxn=3e4+7; struct edge int to,next; e[maxn]; int head[200],tot; void add(int u,int v) e[tot].to=v; e[tot].next=head[u]; head[u]=tot++; bool vis[400]; int course[400],t,m,n,x,y; void init() tot=0; memset(head,-1,sizeof(head)); memset(course,0,sizeof(course)); bool find(int u) for(int i=head[u];i!=-1;i=e[i].next) int v=e[i].to; if(vis[v])continue; vis[v]=true; if(!course[v]||find(course[v])) course[v]=u;return true; return false; int main() scanf("%d",&t); while(t--) scanf("%d%d",&m,&n); init(); for(int i=1;i<=m;i++) scanf("%d",&x); for(int j=1;j<=x;j++) scanf("%d",&y); add(i,y); int sum=0; for(int i=1;i<=m;i++) memset(vis,false,sizeof(vis)); if(find(i))sum++; if(sum==m)printf("YES\n"); else printf("NO\n"); return 0;
以上是关于二分图匹配——POJ - 1469的主要内容,如果未能解决你的问题,请参考以下文章
二分图匹配入门专题1F - COURSES poj1469最大匹配--匈牙利算法模板题