题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1068

题意:一个男生集合和一个女生集合,给出两个集合之间一一对应的关系,求出两个集合中最大独立集的点数。

思路:在二分图中,最大独立集的点数=顶点数-最大匹配数/2;

求二分图的最大匹配数需要用匈牙利算法(主要思想是求:增广路径,增广路径的数目=最大匹配数)。

参考文章:https://blog.csdn.net/u011032846/article/details/38031825

最大独立集:https://blog.csdn.net/Richard_for_OI/article/details/79520470

二分图的最大匹配问题:https://blog.csdn.net/x_y_q_/article/details/51920683

想了好久,还是看代码吧。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = ;
int n,mx[maxn],my[maxn],vis[maxn],e[maxn][maxn];
int path(int i) //i是结合x中的节点
{
int j;
for(j=;j<n;j++) //就是集合y中的节点
{
if(e[i][j]&&!vis[j])
{
vis[j]=;
if(my[j]==-||path(my[j])) //节点未访问或者访问到取反后的节点,两者都不符合,则说明再也找不到增广路径,结束。
{
//取反
my[j]=i;
mx[i]=j;
return ;
}
}
}
return ;
}
int hungry() //匈牙利算法,求最大匹配
{
int res=;
memset(mx,-,sizeof(mx));
memset(my,-,sizeof(my));
for(int i=;i<n;i++)
{
if(mx[i]==-)
{
memset(vis,,sizeof(vis));
res+=path(i);
}
}
return res;
} int main(void)
{
int a,b,m,i;
while(~scanf("%d",&n))
{
memset(e,,sizeof(e));
for(i=;i<n;i++)
{
scanf("%d: (%d)",&a,&m);
while(m--)
{
scanf("%d",&b);
e[a][b]=;
}
}
printf("%d\n",n-hungry()/);
}
return ;
}

hdu-1067(最大独立集)的更多相关文章

  1. HDU 1067 Gap

    HDU 1067 Gap Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)   P ...

  2. [hdu 1067]bfs+hash

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1067 queue里面果然不能放vector,还是自己写的struct比较省内存…… #include& ...

  3. 【hdu 1067】Gap

    Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission( ...

  4. HDU 5556 最大独立集

    这题主要有了中间的一些连通块的限制,不太好直接用二分图最大独立集做.考虑到图比较小,可以作补图求最大团来求解. #include <iostream> #include <vecto ...

  5. hdu 3289 最大独立集

    题意:一个动物园里有N只猫和K只狗,一些小朋友来参观,他们如果喜欢狗就不喜欢猫,喜欢猫就不喜欢狗,园长想要移走一些动物,如果,移走的是某个小朋友不喜欢的,而喜欢的没被移走,该小朋友就会高兴,求移动的数 ...

  6. hdu.1067.Gap(bfs+hash)

    Gap Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. HDU - 1067 Gap (bfs + hash) [kuangbin带你飞]专题二

    题意:    起初定28张卡牌的排列,把其中11,  21, 31, 41移动到第一列,然后就出现四个空白,每个空白可以用它的前面一个数的下一个数填充,例如43后面的空格可以用44填充,但是47后面即 ...

  8. hdu 1068(最大独立集)

    Girls and Boys Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. KUANGBIN带你飞

    KUANGBIN带你飞 全专题整理 https://www.cnblogs.com/slzk/articles/7402292.html 专题一 简单搜索 POJ 1321 棋盘问题    //201 ...

  10. [kuangbin带你飞]专题1-23题目清单总结

    [kuangbin带你飞]专题1-23 专题一 简单搜索 POJ 1321 棋盘问题POJ 2251 Dungeon MasterPOJ 3278 Catch That CowPOJ 3279 Fli ...

随机推荐

  1. vue-cli 上手

    1.cnpm install --global vue-cli 安装脚手架 2.vue init webpack baoge 创建 3.选择配置项 Project name (baoge): ---- ...

  2. HIBERNATE知识复习记录4-HQL和QBC

    Hibernate中共提供了三种检索方式:HQL(Hibernate Query Language).QBC.QBE(Query By Example). HQL 是Hibernate Query L ...

  3. Data Guard 介绍

  4. tair介绍以及配置

    简介 tair 是淘宝自己开发的一个分布式 key/value 存储引擎. tair 分为持久化和非持久化两种使用方式. 非持久化的 tair 可以看成是一个分布式缓存. 持久化的 tair 将数据存 ...

  5. %s %r 区别 转

    也可说是 str() 和 repr() 的区别 转自:http://blog.csdn.net/wusuopubupt/article/details/23678291 %r用rper()方法处理对象 ...

  6. 脱离SVN的控制

    在桌面创建一个记事本文件,然后吧这句话复制进去for /r . %%a in (.) do @if exist "%%a\.svn" rd /s /q "%%a\.svn ...

  7. scikit Flow ,tensor flow 做ml模型

    [https://github.com/ilblackdragon/tf_examples/blob/master/titanic.py] [keras 高层tensorflow] https://k ...

  8. tf.FIFOQueue()

    Tensorflow–tf.FIFOQueue详解描述tf.FIFOQueue根据先进先出(FIFO)的原则创建一个队列.队列是Tensorflow的一种数据结构,每个队列的元素都是包含一个或多个张量 ...

  9. Monkey原理初步和改良优化--Android自动化测试学习历程

    章节:自动化基础篇——Monkey原理初步和改良优化(第三讲) 主要讲解内容与笔记: 一.理论知识: 直接看文档,来了解monkey的概念.基本原理,以及如何使用. First,what is And ...

  10. python的多线程和守护线程

    1.创建一个多线程 import threading import time ''' def threading_func(num): print("running on number:%s ...