HDU 1068 boys and girls(最大独立集)

来源:互联网 发布:网络策划部需要做什么 编辑:程序博客网 时间:2024/05/23 01:57

HDU 1068 boys and girls(最大独立集)

思路:先求最大匹配数cnt,结果为最大独立集的对数:(2*n-cnt)/2 对. (题目保证对数为奇数)

#include <iostream>#include <cstdio>#include <cstring>#include <string>#include <algorithm>#include <stack>#include <cmath>#include <vector>#include <queue>#include <map>using namespace std;#define LL long long#define M 210#define DEBUG puts("It's here!")#define INF 1<<29#define CLS(x,v) memset(x,v,sizeof(x))#define FOR(i,a,n)  for(int i=(a);i<(n);++i)int link[M],vis[M];int graph[M][M];int n;int DFS(int x){    for(int i=0; i<n; i++)        if(!vis[i]&&graph[x][i])        {            vis[i]=1;            if(link[i]==-1||DFS(link[i]))            {                link[i]=x;                return 1;            }        }    return 0;}int main(){    int a,b,k;    while(~scanf("%d",&n))    {        CLS(graph,0);        for(int i=0;i<n;i++){            scanf("%d: ",&a);            scanf("(%d)",&k);            for(int j=0;j<k;j++)             {                 scanf("%d",&b);                 graph[a][b]=1;             }        }        CLS(link,-1);        int cnt=0;        for(int i=0; i<n; i++)        {            CLS(vis,0);            if(DFS(i))cnt++;        }        printf("%d\n",n-cnt/2);    }    return 0;}


0 0
原创粉丝点击