版权声明:本文作者靖心。靖空间地址:http://blog.csdn.net/kenden23/,未经本作者同意不得转载。 https://blog.csdn.net/kenden23/article/details/32696867

选择出一组学生。这组学生里面不能彼此之间有过恋爱史的。

又是一个典型的二分图问题。

只是须要把全部学生看成一组*2。然后求最大匹配,然后除以2. 这样事实上建图的时候。建成有向图也是能够的了。并且也是给出了两个方向的点了。

注意本题没有给出最大数是多少学生了,所以最好使用动态分配内存了。

并且本题的输入处理也特别点。要处理好,用好scanf这个函数。

#include <stdio.h>
#include <stdlib.h> bool **stus, *used;
int *linker;
int N; void initGraph()
{
stus = (bool **) malloc(N * sizeof(bool *));
for (int i = 1; i < N; i++)
stus[i] = (bool *) calloc(N, sizeof(bool));
}
void freeGraph()
{
for (int i = 1; i < N; i++)
free(stus[i]);
free(stus);
} bool hunDFS(int u)
{
for (int v = 1; v < N; v++)
{
if (!used[v] && stus[u][v])
{
used[v] = true;
if (!linker[v] || hunDFS(linker[v]))
{
linker[v] = u;
return true;
}
}
}
return false;
} int hungary()
{
int ans = 0;
linker = (int *) calloc(N, sizeof(int));
for (int i = 1; i < N; i++)
{
used = (bool *) calloc(N, sizeof(bool));
if (hunDFS(i)) ans++;
free(used);
}
free(linker);
return ans>>1;
} int main()
{
int k, v;
while (scanf("%d", &N) != EOF)
{
N++;
initGraph();
for (int u = 1; u < N; u++)
{
scanf("%d: (%d)", &v, &k);
for (int i = 0; i < k; i++)
{
scanf("%d", &v);
stus[u][v+1] = stus[v+1][u] = true;
}
}
printf("%d\n", N - 1 - hungary());
freeGraph();
}
return 0;
}

最新文章

  1. GitHub实战系列汇总篇
  2. React Native props &amp; state
  3. Linux内核设计第八周 ——进程的切换和系统的一般执行过程
  4. LeeCode-Majority Element
  5. ARM系统中函数调用过程中的参数传递-转
  6. 为什么用IP无法访问网站,域名可以访问?
  7. ParameterizedType理解笔记
  8. Python面向对象基础知识
  9. yarn web ui 参数详解
  10. 使用Qemu运行Ubuntu文件系统(1)
  11. 035 HDFS的联盟Federation
  12. linux基础之vim编辑器
  13. [转]【ROLLUP】Oracle分组函数之ROLLUP魅力
  14. 小学四则运算APP 第一个冲刺 第二天
  15. Python标准库:内置函数type(object)
  16. Python编码规则
  17. 从javascript读取cookies说开去:谈谈网页的本地化存储
  18. MAC接普通外置键盘的修改键位的方法
  19. pyhton——logging日志模块的学习
  20. 3.设计模式----TemplateMethod模式

热门文章

  1. 嵌入式之UBOOT
  2. JQuery插件的使用
  3. 剑指offer面试题7:用两个栈实现队列
  4. Java的I/O操作
  5. tp3.2中怎么访问分类及子分类下面的文章
  6. java基础----&gt;使用Itext生成数据库文档
  7. 【线程】Volatile关键字
  8. CSS3 -- 动画库
  9. [PHP] Compile an extension on Windows
  10. javah生成jni头文件时报错 Error: cannot access android.support...