HDU 1068 最大独立数(最大独立数 = 顶点数 - 最大匹配数/2)

来源:互联网 发布:人工智能电影优酷 编辑:程序博客网 时间:2024/06/05 07:45

题目大意:有n个学生,有些学生可以配对(当然是一男一女),有些不可以,相当于如果一男一女可以配对就让他们成为一组,配对不成功的就自己一组,要求最小的组数。

所以 就是一个最大独立数的问题了

最大独立数 = 顶点数 - 最大匹配数/2

采用邻接表


#include <stdio.h>#include <string.h>#include <vector>using namespace std;bool v[505]; //是否已经访问int link[505],n;vector <int> my[505];int find(int x)//二分匹配程序{int i,y;for (i=0;i<my[x].size();i++){y=my[x][i];if (!v[y]){v[y]=1;if (!link[y] || find(link[y])){link[y]=x;return 1;}}}return 0;}int main (){int i,p,k,m,sum;while (scanf("%d",&n)!=EOF){for (i=0;i<n;i++)my[i].clear();for (i=0;i<n;i++){scanf("%d: (%d)",&m,&k);while (k--){scanf("%d",&p);my[m].push_back(p);}}sum=0;memset(link,0,sizeof(link));for (i=0;i<n;i++){memset(v,0,sizeof(v));if (find(i)) sum++;}printf ("%d\n",n-sum/2);}return 0;}