Description: There are P-door classes, each course has a number of students, now to assign a class representative for each course, each student can only act as a class representative, if each class can find the class representative, then output "YES", otherwise "NO".
Two-point matching
#include <iostream> #include <cstring> #define MAXN 305using namespace Std;int c,s;int rem[maxn][maxn];int Visit[maxn],map[maxn];int dfs (int x) {for (int i=1;i<=s;i++) {if (Rem[x][i]&&!visit[i]) {visit[i]=1;if (!map [i]| | DFS (Map[i])) {Map[i]=x;return 1;}}} return 0;} int main () {int T;cin>>t;while (t--) {memset (rem,0,sizeof (REM)); memset (map,0,sizeof (map));cin>>c> >s;for (int i=1;i<=c;i++) {int X,y;cin>>x;while (x--) {cin>>y;rem[i][y]=1;}} int sum=0;for (int i=1;i<=c;i++) {memset (visit,0,sizeof (visit)), if (Dfs (i)) sum++;} if (sum==c) cout<< "YES" <<endl;else cout<< "NO" <<ENDL;} return 0;}
HDU 1083 Courses