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

解题思路:

这题看上去很和二分图的最小顶点覆盖很相似,但关键怎么处理多个不同颜色的气球。

其实就是每次只考虑一个气球,利用一个气球的颜色建立二分图,看它的最小顶点覆盖是否小于k,如果是则说明符合要求。。好吧,至少我没想到。。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;const int maxn = 105;
int n,m,g[maxn][maxn],color[maxn][maxn];
int match[maxn];
int ans[maxn];
bool vis[maxn];
set<int> Set;bool dfs(int u)
{for(int i = 1; i <= n; i++){if(g[u][i] > 0 && vis[i] == false){vis[i] = true;if(match[i] == -1 || dfs(match[i])){match[i] = u;return true;}}}return false;
}int Max_Match()
{int ans = 0;memset(match,-1,sizeof(match));for(int i = 1; i <= n; i++){memset(vis,false,sizeof(vis));if(dfs(i))ans++;}return ans;
}int main()
{while(scanf("%d%d",&n,&m),n+m){for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){scanf("%d",&color[i][j]);Set.insert(color[i][j]);}int len = 0;for(set<int>::iterator it = Set.begin(); it != Set.end(); it++){int c = *it;for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++){if(color[i][j] == c)g[i][j] = 1;else g[i][j] = 0;}if(Max_Match() > m) ans[++len] = c;}if(len == 0) printf("-1\n");else {for(int i = 1; i <= len; i++)printf(i == len ?"%d\n":"%d ",ans[i]);  }}return 0;
}

hdu 1498(二分图最小顶点覆盖)相关推荐

  1. POJ3041 Asteroids 二分图最小顶点覆盖 Dinic求解最大流

    题意 一个n*n的矩阵,有k个位置有小行星,一炮可以摧毁一行或一列行星 问最少需要多少炮可以摧毁所有行星 思路 把一行.一列看成节点,矩阵里的一个小行星看成一条边,如行星位置(r,c),则第r行的节点 ...

  2. HDU 1533 二分图最小权匹配 Going Home

    带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. 1 #include <iostream> 2 #include < ...

  3. 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)

    在讲述这两个算法之前,首先有几个概念需要明白: 二分图:  二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...

  4. [poj3041]Asteroids(二分图的最小顶点覆盖)

    题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...

  5. hdu 1054(最小顶点覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:最小顶点覆盖 == 最大匹配(双向图)/2...不过一开始是用邻接矩阵,傻傻的TLE... ...

  6. 二分图的最小顶点覆盖 和 最大独立集 和 最大团

    最小顶点覆盖 概念: 如果称选了一个点的话, 就覆盖了所有与这点相连的边. 现在要选出最小的点, 来覆盖二分图中所有边. 结论: 最小顶点覆盖 = 二分图最大匹配. 证明: Click 最大独立集 概 ...

  7. poj2226(最小顶点覆盖)

    (相当于是poj3041的进阶版,不过难度还好) 题目大概意思为将一个矩阵中的泥泞部分给覆盖起来,可以横着覆盖也可以竖着覆盖,但不能覆盖到其他草地部分,覆盖的板子长度随意,宽度为1,可以重复覆盖,求最 ...

  8. 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】

    最小边覆盖 = 最大独立集 = |V| - 最大匹配数 这个是在原图是二分图上进行的 最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图 ...

  9. poj 1325 Machine Schedule 最小顶点覆盖

    题意 两个机器A,B, 分别有 N,M个工作模式, K个作业,可以在( Ai, Bj ) 模式下工作. 机器最初在模式0下. 问最小的 切换模式次数. 解题思路 A, B 两个天然二分图顶点集合,   ...

最新文章

  1. nable to execute dex: Multiple dex files define Lcom/chinaCEB/cebActivity/R
  2. 青龙羊毛——最美阅读
  3. ECSHOP其他页面调用首页的FLASH主广告
  4. python自动化发送邮件_Python发送邮件自动化脚本
  5. 精选论文集|Transformer在视觉领域中的应用
  6. 命名实体识别之基本概念
  7. java repaint 无效_java repaint()无效
  8. [SSH] Permissions 0644 for ‘.ssh/id_rsa‘ are too open.
  9. ambari 2.7 下安装httpfs
  10. 考试管理系统【软件工程实践课设报告】
  11. Android访问assets本地Json文件
  12. 停车还能360全方位影像_新司机轻松,老司机上瘾,中大型SUV都少不了360°全景影像...
  13. 计算机安全证书有问题怎么办,提示此网站的安全证书有问题怎么办
  14. IE取消或设置代理服务器脚本
  15. 李开复:移动互联网创业看趋势 看好Android
  16. 云桌面真的可以完全代替PC电脑吗?
  17. 数据库范式1NF 2NF 3NF BCNF通俗讲解
  18. Pacbio测序原理以及SMRT bell文库构建流程简述
  19. 吉大c 语言程序设计奥鹏作业,吉大19年9月《C语言程序设计》作业考核试题
  20. Win10各版本介绍及区别:

热门文章

  1. java观察者模式在spring中的应用_利用spring自己实现观察者模式
  2. 科普|数据治理如何在 Martech 中发挥效能?
  3. bootstrap checkbox选中事件
  4. 接口自动化实现图片上传(selenium/RF)
  5. 绿色数据中心将惠及众生
  6. 高度平衡树 -- AVL 树
  7. struts2学习笔记--拦截器(Interceptor)和登录权限验证Demo
  8. Java_StringBuffer类
  9. Java里的按值传递与引用传递
  10. session outline for different culture