http://acm.hdu.edu.cn/showproblem.php?pid=1498

题意:给出一个 n*n 的矩阵,里面的数字代表一种颜色,每次能炸掉一排或者一列的相同颜色的气球,问有哪些颜色的气球不能在 k 次内炸完的,从小到大输出,能炸完输出-1.

思路:先存下点,用一个数字标记颜色是否出现过,然后遍历每一种颜色,再把这种颜色的行号和列号连边,跑一遍匈牙利,如果得到的结果大于 k 那么这种颜色就不行。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdlib>
 5 #include <algorithm>
 6 #include <string>
 7 #include <iostream>
 8 #include <stack>
 9 #include <map>
10 #include <queue>
11 using namespace std;
12 #define N 100010
13 #define INF 0x3f3f3f3f
14 struct node
15 {
16     int nxt, v;
17 }edge[105*105];
18 int mp[105][105];
19 int head[105], tot;
20 bool vis[105], col[105];
21 int ans[105];
22 int match[105], n, k;
23
24 void add(int u, int v)
25 {
26     edge[tot].v = v; edge[tot].nxt = head[u]; head[u] = tot++;
27 }
28
29 bool dfs(int u)
30 {
31     for(int i = head[u]; ~i; i = edge[i].nxt) {
32         int v = edge[i].v;
33         if(!vis[v]) {
34             vis[v] = 1;
35             if(match[v] == -1 || dfs(match[v])) {
36                 match[v] = u;
37                 return true;
38             }
39         }
40     }
41     return false;
42 }
43
44 int main()
45 {
46     while(scanf("%d%d", &n, &k), n + k) {
47         memset(mp, 0, sizeof(mp));
48         memset(col, 0, sizeof(col));
49         for(int i = 1; i <= n; i++) {
50             for(int j = 1; j <= n; j++) {
51                 scanf("%d", &mp[i][j]);
52                 col[mp[i][j]] = 1;
53             }
54         }
55         int l = 0;
56         for(int i = 1; i <= 50; i++) {
57             if(col[i]) {
58                 tot = 0;
59                 memset(head, -1, sizeof(head));
60                 for(int j = 1; j <= n; j++) {
61                     for(int k = 1; k <= n; k++) {
62                         if(mp[j][k] == i) {
63                             add(j, k);
64                         }
65                     }
66                 }
67                 memset(match, -1, sizeof(match));
68                 int tmp = 0;
69                 for(int j = 1; j <= n; j++) {
70                     memset(vis, 0, sizeof(vis));
71                     if(dfs(j)) tmp++;
72                 }
73                 if(tmp > k) ans[l++] = i;
74             }
75         }
76 //        printf("ans : ");
77         for(int i = 0; i < l; i++) {
78             if(i != l - 1) printf("%d ", ans[i]);
79             else printf("%d\n", ans[i]);
80         }
81         if(l == 0) printf("-1\n");
82     }
83     return 0;
84 }

转载于:https://www.cnblogs.com/fightfordream/p/6042795.html

HDU 1498:50 years, 50 colors(二分图匹配)相关推荐

  1. HDU 2444 The Accomodation of Students 二分图匹配

    HDU 2444 The Accomodation of Students 二分图匹配 题目来源: HDU 题意: 给出学生数n和关系数m,接下来给出m个关系. 要求将学生分成两部分,每一部分不能有互 ...

  2. HDU 2063 过山车 (二分图匹配之匈牙利算法)

    过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submis ...

  3. 【HDU 1150】Machine Schedule(二分图匹配)

    机器的不同模式为点,对于每个job,建两条边 A机器需要的模式<->B机器需要的模式. 问题转化为最小点覆盖,然后用二分图的最小点覆盖==最大匹配,用匈牙利算法解. #include &l ...

  4. HDU——1498 50 years, 50 colors

    50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  5. 【 HDU - 5093】Battle ships(匈牙利算法,二分图匹配)

    题干: Dear contestant, now you are an excellent navy commander, who is responsible of a tough mission ...

  6. HDU 2819 Swap(二分图匹配)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=2819 [题目大意] 给出一个棋盘,由白格子和黑格子组成,可以交换棋盘的行列, 使得其主对角线为黑格 ...

  7. 【HDU - 5090】Game with Pearls (匈牙利算法,二分图匹配)

    题干: Tom and Jerry are playing a game with tubes and pearls. The rule of the game is: 1) Tom and Jerr ...

  8. HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)

    题意:n 个男生.n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚:对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友.每次游戏女生会找一 ...

  9. HDU 2389 Rain on your Parade (二分图匹配)

    题意:天马上就要下雨了,然后有n个人,m把伞,然后分别给出人的坐标和他们跑的速度,以及伞的坐标,然后问在t时间内,最多能有多少人拿到伞. 题解:二分图匹配 之前做过一道类似的题目,是用最大流做的,但这 ...

  10. Dinic二分图匹配 || Luogu P3386

    题面:[模板]二分图匹配 思路:Dinic实现二分图匹配,要建一个超级源点(S)和超级汇点(T),分别定为N+M+1和N+M+2 然后S去和N中的数建正边和反边,正边权值为1,反边权值为0:M中的数去 ...

最新文章

  1. 在Linux上编译安装php开发环境(install mysql5.6)-3
  2. Python从N个数中找到最大的K个数
  3. [mybatis]动态sql_内置参数_parameter_databaseid
  4. java 监控对象是什么_多线程-Java中的对象监视器是什么意思? 为什么要使用这个词?...
  5. 基于链表的两个集合的差集
  6. 在anaconda下创建我的第一个scrapy爬虫——爬取dmoz网站某一网址下的目录的链接名称以及链接地址...
  7. 常见的通配符_技术干货 | 常见的mysql注入语句
  8. C语言解决迭代递推问题
  9. 推理集 —— 特殊的工具(二)
  10. .net core websocket
  11. C语言蒙特卡洛,蒙特卡洛(Monte Carlo)模拟法 一  ( EXCEL 举例)
  12. Java聊天室系统的设计与实现(完整源码 sql文件 论文)
  13. python任务调度demo-百度贴吧签到
  14. 论文结构及其内容简介
  15. Snowy Smile hdu 6638 线段树
  16. 新浪邮箱服务器设置,新浪企业邮箱|帮助中心
  17. Excel - VBA的隔行拷贝功能
  18. 鸿蒙系统充电动画,荣耀智慧屏首发抢先体验:电视只是小功能,鸿蒙系统才是真亮点...
  19. 我若不坚强,没有人会懂我到底有多痛
  20. CVPR2022|稀疏融合稠密:通过深度补全实现高质量的3D目标检测

热门文章

  1. TypeScript Type Innference(类型推断)
  2. 500 OOPS:cannot change directory:/root 问题
  3. POJ 图算法(3)
  4. APAX-5017PG 项目开发全程记录 - 筹备篇
  5. Unity初步 基本拼图实现
  6. 第四周编程总结--助教
  7. IDEA编译时出现 Information:java: javacTask: 源发行版 1.8 需要目标发行版 1.8
  8. 13.2. Mount partition
  9. Tomcat开机启动
  10. cms查询系统(一)背景以及需求分析与设计