hdu1498
Posted vege-chicken-rainstar
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu1498相关的知识,希望对你有一定的参考价值。
先贴一个好博客:好博客
hdu1498
以行为左点集, 列为右点集, 平面每个点mp[i,j]变成由行i和列j连接的边,题目变成了对每种颜色求这个二分图的最小点覆盖。
#include <iostream>
#include <cstring>
using namespace std;
int mp[105][105];
bool vis[105];
int x[105], y[105];
int n, k;
int find(int u, int color)
for(int v = 1; v <= n; v++)
if(mp[u][v] == color && !vis[v])
vis[v] = true;
if(x[v] == -1 || find(x[v], color))
x[v] = u;
return 1;
return 0;
int main()
while(cin >> n >> k)
if(!n) break;
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++) cin >> mp[i][j];
int ans[55], cnt = 0;
for(int color = 1; color <= 50; color++)
int sum = 0;
for(int i = 1; i <= n; i++) x[i] = -1;
for(int i = 1; i <= n; i++)
memset(vis, 0, sizeof(vis));
sum += find(i, color);
if(sum > k) ans[++cnt] = color;
if(!cnt) cout << -1 << '\\n';
else
for(int i = 1; i < cnt; i++) cout << ans[i] << " ";
cout << ans[cnt] << '\\n';
return 0;
以上是关于hdu1498的主要内容,如果未能解决你的问题,请参考以下文章
HDU——T 1498 50 years, 50 colors
hdu 1498 50 years, 50 colors 最小点覆盖
HDU4089/Uva1498 Activation 概率DP(好题)