hdu 1498(二分图最小顶点覆盖)
题目链接: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(二分图最小顶点覆盖)相关推荐
- POJ3041 Asteroids 二分图最小顶点覆盖 Dinic求解最大流
题意 一个n*n的矩阵,有k个位置有小行星,一炮可以摧毁一行或一列行星 问最少需要多少炮可以摧毁所有行星 思路 把一行.一列看成节点,矩阵里的一个小行星看成一条边,如行星位置(r,c),则第r行的节点 ...
- HDU 1533 二分图最小权匹配 Going Home
带权二分图匹配,把距离当做权值,因为是最小匹配,所以把距离的相反数当做权值求最大匹配. 最后再把答案取一下反即可. 1 #include <iostream> 2 #include < ...
- 最大匹配、最小顶点覆盖、最大独立集、最小路径覆盖(转)
在讲述这两个算法之前,首先有几个概念需要明白: 二分图: 二分图又称二部图,是图论中的一种特殊模型.设G=(V,E)是一个无向图,如果顶点V可以分割为两个互不相交的子集(A,B),并且图中的每条边( ...
- [poj3041]Asteroids(二分图的最小顶点覆盖)
题目大意:$N*N$的网格中有$n$颗行星,若每次可以消去一整行或一整列,求最小的攻击次数使得消去所有行星. 解题关键:将光束当做顶点,行星当做连接光束的边建图,题目转化为求该图的最小顶点覆盖,图的最 ...
- hdu 1054(最小顶点覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 思路:最小顶点覆盖 == 最大匹配(双向图)/2...不过一开始是用邻接矩阵,傻傻的TLE... ...
- 二分图的最小顶点覆盖 和 最大独立集 和 最大团
最小顶点覆盖 概念: 如果称选了一个点的话, 就覆盖了所有与这点相连的边. 现在要选出最小的点, 来覆盖二分图中所有边. 结论: 最小顶点覆盖 = 二分图最大匹配. 证明: Click 最大独立集 概 ...
- poj2226(最小顶点覆盖)
(相当于是poj3041的进阶版,不过难度还好) 题目大概意思为将一个矩阵中的泥泞部分给覆盖起来,可以横着覆盖也可以竖着覆盖,但不能覆盖到其他草地部分,覆盖的板子长度随意,宽度为1,可以重复覆盖,求最 ...
- 【每日算法】【图论】【最小边覆盖 最小路径覆盖 最小顶点覆盖 最大独立集 最大团】
最小边覆盖 = 最大独立集 = |V| - 最大匹配数 这个是在原图是二分图上进行的 最小路径覆盖和最小边覆盖不同,不要求给的图是二分图,而是要求是N x N的有向图,不能有环,然后根据原图构造二分图 ...
- poj 1325 Machine Schedule 最小顶点覆盖
题意 两个机器A,B, 分别有 N,M个工作模式, K个作业,可以在( Ai, Bj ) 模式下工作. 机器最初在模式0下. 问最小的 切换模式次数. 解题思路 A, B 两个天然二分图顶点集合, ...
最新文章
- nable to execute dex: Multiple dex files define Lcom/chinaCEB/cebActivity/R
- 青龙羊毛——最美阅读
- ECSHOP其他页面调用首页的FLASH主广告
- python自动化发送邮件_Python发送邮件自动化脚本
- 精选论文集|Transformer在视觉领域中的应用
- 命名实体识别之基本概念
- java repaint 无效_java repaint()无效
- [SSH] Permissions 0644 for ‘.ssh/id_rsa‘ are too open.
- ambari 2.7 下安装httpfs
- 考试管理系统【软件工程实践课设报告】
- Android访问assets本地Json文件
- 停车还能360全方位影像_新司机轻松,老司机上瘾,中大型SUV都少不了360°全景影像...
- 计算机安全证书有问题怎么办,提示此网站的安全证书有问题怎么办
- IE取消或设置代理服务器脚本
- 李开复:移动互联网创业看趋势 看好Android
- 云桌面真的可以完全代替PC电脑吗?
- 数据库范式1NF 2NF 3NF BCNF通俗讲解
- Pacbio测序原理以及SMRT bell文库构建流程简述
- 吉大c 语言程序设计奥鹏作业,吉大19年9月《C语言程序设计》作业考核试题
- Win10各版本介绍及区别: