pku 1466 Girls and Boys 最大独立集 解题报告

来源:互联网 发布:mysql优化面试题 编辑:程序博客网 时间:2024/05/09 14:48

#include <stdio.h>
#include <string.h>
const int maxn = 505;

int N, link[maxn];
bool graph[maxn][maxn], visit[maxn];

bool SearchPath(int u)
{
 int v;
 for (v = 0; v < N; v++)
 {
  if (graph[u][v] && !visit[v])
  {
   visit[v] = true;
   if (link[v] == -1 || SearchPath(link[v]))
   {
    link[v] = u;
    link[u] = v;
    return true;
   }
  }
 }
 return false;
}

int MaxMatch()
{
 int i, res = 0;
 memset(link, -1, sizeof(link));
 for (i = 0; i < N; i++)
 {
  if (link[i] == -1)
  {
   memset(visit, false, sizeof(visit));
   if (SearchPath(i))
   {
    res++;
   }
  }
 }
 return res;
}

int main()
{
 freopen("1.txt", "r", stdin);
 int i, j, k, t;
 char c;
 bool over;
 while (scanf("%d", &N) != EOF)
 {
  memset(graph, false, sizeof(graph));
  getchar();
  for (i = 0; i < N; i++)
  {
   over = false;
   while (!over)
   {
    scanf("%c", &c);
    if (c != '(')
    {
     continue;
    }
    else
    {
     scanf("%d", &j);
     scanf("%c", &c);
     for (k = 0; k < j; k++)
     {
      scanf("%d", &t);
      graph[i][t] = true;
     }
    }
    getchar();
    over = true;
   }
  }
  //最大独立集=顶点数-二分图最大匹配
  printf("%d/n", N - MaxMatch());
 }
 return 0;
}