poj 1469 COURSES 最大匹配
题意
P个课程,N个学生,之间有边连接,问是否可以 P个学生选择不同的P个课程。
解题思路
最大匹配
#include<stdio.h> #include<stdlib.h> #include<string.h> const int N = 310; int p, n; bool g[110][310]; int ma[N], mb[N]; bool vis[N]; int path( int u ){ for(int v = 1; v <= n; v++){ if( g[u][v] && !vis[v] ){ vis[v] = 1; if( ma[v] == -1 || path( ma[v] )){ ma[v] = u; mb[u] = v; return 1; } } } return 0; } int main(){ int T; scanf("%d", &T); while( T-- ){ scanf("%d%d", &p, &n ); memset( g, 0, sizeof(g)); for(int i = 1; i <= p; i++){ int cnt = 0, st; scanf("%d", &cnt ); for(int j = 0; j < cnt; j++){ scanf("%d", &st); g[i][st] = 1; } } memset( ma, 0xff, sizeof(ma)); memset( mb, 0xff, sizeof(mb)); int res = 0; for(int i = 1; i <= p; i++){ if( mb[i] == -1 ){ memset( vis, 0, sizeof(vis)); res += path( i ); } } puts( res == p ? "YES" : "NO" ); } return 0; }