hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)

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

50 years, 50 colors

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1918    Accepted Submission(s):
1058

Problem Description

On Octorber 21st, HDU 50-year-celebration, 50-color
balloons floating around the campus, it‘s so nice, isn‘t it? To celebrate this
meaningful day, the ACM team of HDU hold some fuuny games. Especially, there
will be a game named "crashing color balloons".

There will be a n*n
matrix board on the ground, and each grid will have a color balloon in it.And
the color of the ballon will be in the range of [1, 50].After the referee shouts
"go!",you can begin to crash the balloons.Every time you can only choose one
kind of balloon to crash, we define that the two balloons with the same color
belong to the same kind.What‘s more, each time you can only choose a single row
or column of balloon, and crash the balloons that with the color you had chosen.
Of course, a lot of students are waiting to play this game, so we just give
every student k times to crash the balloons.

Here comes the problem:
which kind of balloon is impossible to be all crashed by a student in k
times.

Input

There will be multiple input cases.Each test case
begins with two integers n, k. n is the number of rows and columns of the
balloons (1 <= n <= 100), and k is the times that ginving to each
student(0 < k <= n).Follow a matrix A of n*n, where Aij denote the color
of the ballon in the i row, j column.Input ends with n = k = 0.

Output

For each test case, print in ascending order all the
colors of which are impossible to be crashed by a student in k times. If there
is no choice, print "-1".

Sample Input

1 1

1

2 1

1 1

1 2

2 1

1 2

2 2

5 4

1 2 3 4 5

2 3 4 5 1

3 4 5 1 2

4 5 1 2 3

5 1 2 3 4

3 3

50 50 50

50 50 50

50 50 50

0 0

Sample Output

-1

1

2

1 2 3 4 5

-1

Author

8600

Source

“2006校园文化活动月”之“校庆杯”大学生程序设计竞赛暨杭州电子科技大学第四届大学生程序设计竞赛

题目大意:刷气球,气球有很多种颜色。 每次刷气球可以刷一整行或者一整列,刷m次,最后输出刷不完的气球数字。(每个不同的数字代表不同颜色的气球)。

特别注意:气球的颜色数字范围在1~50之间。

详见代码(代码解释)

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4
 5 using namespace std;
 6
 7 int n,m;
 8 int vis[110],Map[110][110],ok[110],cc[55];
 9
10 bool Find(int x,int now)
11 {
12     for (int i=1; i<=n; i++)
13     {
14         if (!vis[i]&&Map[x][i]==now)
15         {
16             vis[i]=1;
17             if (!ok[i])
18             {
19                 ok[i]=x;
20                 return true;
21             }
22             else
23             {
24                 if (Find(ok[i],now))
25                 {
26                     ok[i]=x;
27                     return true;
28                 }
29             }
30         }
31     }
32     return false;
33 }
34
35 int main()
36 {
37     int flag,ans,s[110];
38     while (~scanf("%d%d",&n,&m))
39     {
40         flag=0;
41         memset(cc,0,sizeof(cc));
42         memset(Map,0,sizeof(Map));
43         if (n==0&&m==0)
44             break;
45         for (int i=1; i<=n; i++)
46         {
47             for (int j=1; j<=n; j++)
48             {
49                 scanf("%d",&Map[i][j]);
50                 cc[Map[i][j]]=1;//记录这个颜色出现过
51             }
52         }
53         memset(ok,0,sizeof(ok));
54         int k=0;
55         for (int i=1; i<=50; i++)
56         {
57             memset(ok,0,sizeof(ok));
58             ans=0;
59             if (cc[i]==1)    //判断颜色是否出现过,加入这里不进行标记的话最后输出的是没有被刷完的颜色数字,就会输出一些乱七八糟的东西
60             {
61                 for (int j=1; j<=n; j++)
62                 {
63                     memset(vis,0,sizeof(vis));
64                     if (Find(j,i))
65                         ans++;
66                 }
67                 if (ans>m)   //如果最大匹配数大于m次的话就是刷不完的
68                 {
69                     s[++k]=i;
70                     flag=1;
71                 }
72             }
73         }
74         if (flag==0)
75             printf ("-1\n");
76         else
77         {
78             for (int i=1; i<k; i++)    //控制输出格式
79             {
80                 printf ("%d ",s[i]);
81             }
82             printf ("%d\n",s[k]);
83         }
84     }
85     return 0;
86 }
时间: 2024-10-12 01:25:25

hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)的相关文章

HDU 1150:Machine Schedule(二分匹配,匈牙利算法)

Machine Schedule Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 5371    Accepted Submission(s): 2658 Problem Description As we all know, machine scheduling is a very classical problem in compu

HDU 2063:过山车(二分匹配,匈牙利算法)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9745    Accepted Submission(s): 4294 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

POJ 3014:Asteroids(二分匹配,匈牙利算法)

Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14399   Accepted: 7836 Description Bessie wants to navigate her spaceship through a dangerous asteroid field in the shape of an N x N grid (1 <= N <= 500). The grid contains K as

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

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 12475    Accepted Submission(s): 5446 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

hdoj 2063 过山车 【二分匹配之匈牙利算法】

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11520    Accepted Submission(s): 5072 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

hdu2063 最大二分匹配(匈牙利算法)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 30799    Accepted Submission(s): 13289 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa

hdu 2063 过山车 二分匹配(匈牙利算法)

简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13500    Accepted Submission(s): 5913 Problem Description RPG girls今天和大家一起去游乐场玩

hdu Courses 1083 二分匹配 ,匈牙利算法。。水题

Courses Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4233    Accepted Submission(s): 2014 Problem Description Consider a group of N students and P courses. Each student visits zero, one or

hdu1498--50 years, 50 colors(二分匹配,题意。。。)

50 years, 50 colors Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1617    Accepted Submission(s): 881 Problem Description On Octorber 21st, HDU 50-year-celebration, 50-color balloons floating