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
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.

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.
colors of which are impossible to be crashed by a student in k times. If there
is no choice, print "-1".
#include <iostream>
#include <cstdio>
#include <cstring> using namespace std; int n,m;
int vis[],Map[][],ok[],cc[]; bool Find(int x,int now)
{
for (int i=; i<=n; i++)
{
if (!vis[i]&&Map[x][i]==now)
{
vis[i]=;
if (!ok[i])
{
ok[i]=x;
return true;
}
else
{
if (Find(ok[i],now))
{
ok[i]=x;
return true;
}
}
}
}
return false;
} int main()
{
int flag,ans,s[];
while (~scanf("%d%d",&n,&m))
{
flag=;
memset(cc,,sizeof(cc));
memset(Map,,sizeof(Map));
if (n==&&m==)
break;
for (int i=; i<=n; i++)
{
for (int j=; j<=n; j++)
{
scanf("%d",&Map[i][j]);
cc[Map[i][j]]=;//记录这个颜色出现过
}
}
memset(ok,,sizeof(ok));
int k=;
for (int i=; i<=; i++)
{
memset(ok,,sizeof(ok));
ans=;
if (cc[i]==) //判断颜色是否出现过,加入这里不进行标记的话最后输出的是没有被刷完的颜色数字,就会输出一些乱七八糟的东西
{
for (int j=; j<=n; j++)
{
memset(vis,,sizeof(vis));
if (Find(j,i))
ans++;
}
if (ans>m) //如果最大匹配数大于m次的话就是刷不完的
{
s[++k]=i;
flag=;
}
}
}
if (flag==)
printf ("-1\n");
else
{
for (int i=; i<k; i++) //控制输出格式
{
printf ("%d ",s[i]);
}
printf ("%d\n",s[k]);
}
}
return ;
}
hdu 1498 50 years, 50 colors(二分匹配_匈牙利算法)的更多相关文章
- hdu 3729 I'm Telling the Truth(二分匹配_ 匈牙利算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3729 I'm Telling the Truth Time Limit: 2000/1000 MS ( ...
- HDU 1150:Machine Schedule(二分匹配,匈牙利算法)
Machine Schedule Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu2063 最大二分匹配(匈牙利算法)
过山车 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- hdu 2063 过山车 二分匹配(匈牙利算法)
简单题hdu2063 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Ot ...
- POJ 3014:Asteroids(二分匹配,匈牙利算法)
id=3041">Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14399 Acce ...
- 二分图的最大匹配以及带权匹配【匈牙利算法+KM算法】
二分图算法包括 匈牙利算法 与 KM算法. 匈牙利算法 在这里写上模板. 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 #include< ...
- HDU5090--Game with Pearls 二分图匹配 (匈牙利算法)
题意:给N个容器,每个容器里有一定数目的珍珠,现在Jerry开始在管子上面再放一些珍珠,放上的珍珠数必须是K的倍数,可以不放.最后将容器排序,如果可以做到第i个容器上面有i个珍珠,则Jerry胜出,反 ...
- HDU 6178 Monkeys(树上的二分匹配)
http://acm.hdu.edu.cn/showproblem.php?pid=6178 题意:现在有一n个顶点的树形图,还有k只猴子,每个顶点只能容纳一只猴子,而且每只猴子至少和另外一只猴子通过 ...
- HDU - 3081 Marriage Match II 【二分匹配】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意 有n对男女 女生去选男朋友 如果女生从来没和那个男生吵架 那么那个男生就可以当她男朋友 女 ...
随机推荐
- ubuntu 手动apache记录
1.下载apache tar -xvzf httpd.xx 解压 2.下载安装pcre Download PCRE from PCRE.org 解压,进入文件夹中 ./configure --pre ...
- ASP.NET 页面访问控制
request常用对象和方法: @属性:1.quary string,获取通过URL路径传来的数据 2.Form,获取通过表单提交传输的数据 3.servervariables,获取Web服务器变量的 ...
- Java7 Fork-Join 框架:任务切分,并行处理
概要 现代的计算机已经向多CPU方向发展,即使是普通的PC,甚至现在的智能手机.多核处理器已被广泛应用.在未来,处理器的核心数将会发展的越来越多.虽然硬件上的多核CPU已经十分成熟,但是很多应用程序并 ...
- Vue.js checkbox 练习
<div id="app"> <input type=" />足球 <input type=" />篮球 <input ...
- 点击除指定元素以外的任意地方隐藏js
$(document).click(function () { $(".search_box").hide(); }); $(".resultUl").on(& ...
- jquery 集合注意点
- BZOJ4925 城市规划
对每个人行道求出移动距离在哪些区间内时其在建筑物前面.现在问题即为选一个点使得其被最多的区间包含.差分即可.对建筑暴力去掉重叠部分.开始时没有去重用了nm次vector的push_back,时间大概是 ...
- 题解 P1423 【小玉在游泳】
这道题可以用简单的蒟蒻do-while循环,方式:直到型 因为是萌新/蒟蒻,所以并不知道这道题的时间/空间复杂度是多大 脚踩std(^▽^)摩擦 #include <iostream> # ...
- (转)修改Android 的framework层后,重新编译
1.下面方法适合真机:下载android源码,然后编译你修改的framwork的代码,会生成framework.jar,然后push到system/framework目录下,重启机器!ok 2,下面方 ...
- hdu1693 Eat the Trees 【插头dp】
题目链接 hdu1693 题解 插头\(dp\) 特点:范围小,网格图,连通性 轮廓线:已决策点和未决策点的分界线 插头:存在于网格之间,表示着网格建的信息,此题中表示两个网格间是否连边 状态表示:当 ...