HDU 1498 50 years, 50 colors(最小顶点覆盖)
2016-05-15 20:41
465 查看
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1498
思路:和HDU2119有点像,枚举每种颜色的气球就行
AC代码:
思路:和HDU2119有点像,枚举每种颜色的气球就行
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <algorithm> #include <queue> #include <stack> #include <map> #include <cstring> #include <climits> #include <cmath> #include <cctype> const int inf = 0x3f3f3f3f;//1061109567 typedef long long ll; const int maxn = 40000; #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 using namespace std; int map1[110][110]; int map2[110][110]; int parter[110]; int visit[110]; int n; int find1(int x) { for (int i = 1; i <= n; i++) { if (map2[x][i] && visit[i] == 0)//如果有边 且 未被搜索过 { visit[i] = 1; if (parter[i] == 0 || find1(parter[i]))//如果该男孩没有搭档或者能够给该男孩另找到一搭档 { parter[i] = x; return 1; } } } return 0; } int solve(int x) { memset(map2, 0, sizeof(map2)); for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (map1[i][j] == x) map2[i][j] = 1; } } int sum = 0; memset(parter, 0, sizeof(parter)); for (int i = 1; i <= n; i++) { memset(visit, 0, sizeof(visit)); if (find1(i)) sum++; } return sum; } int main() { int k; int b[110]; while (scanf("%d%d", &n, &k) ,n+k) { for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { scanf("%d", &map1[i][j]); } } int m = 0; for (int i = 1; i <= 50; i++) { if (solve(i) > k) b[m++] = i; } if (m == 0) { printf("-1\n"); } else { for (int i = 0; i < m; i++) { if (i == 0) { printf("%d", b[i]); } else printf(" %d", b[i]); } printf("\n"); } } return 0; }
相关文章推荐
- Fragment事务及Fragment实现选项卡功能
- 顺序表应用6:有序顺序表查询
- 从头认识多线程-2.19 synchronized同步方法的无限等待与解决方法
- 深度学习模型之各种caffe版本(Linux和windows)的网址
- 团队博客1
- Nginx安装与优化
- Java基本数据类型和运算符
- C++虚函数表解析
- C++ 函数重载
- 2016百度之星
- mysql字符集修改
- 基于JDBC层数据权限是如何设计的
- 团体程序设计天梯赛-模拟赛(2016年)
- 戒烟20分钟-15年
- 百度前端技术学院task35源代码——听指令的小方块3
- 系统架构设计——设计模式之代理模式(一)
- 《数据结构》使用数组实现数制的转换
- 搭建自己的svn 外网访问 遇到的问题
- CSS简单使用
- XueXX and P-P String(中南OJ)