[POJ3041] Asteroids(最小点覆盖-匈牙利算法)
2024-09-26 23:31:43
题意:
给一个N*N的矩阵,有些格子有障碍,要求我们消除这些障碍,问每次消除一行或一列的障碍,最少要几次。
解析:
把每一行与每一列当做二分图两边的点。
某格子有障碍,则对应行与列连边。
选出最少的点,使得所有边被覆盖。
最小点覆盖。
——代码
#include <cstdio>
#include <cstring>
#define M(x, a) memset(a, x, sizeof(a)) using namespace std; const int MAXN = ;
int n, k, cnt, ans;
int head[MAXN], next[MAXN * MAXN], to[MAXN * MAXN], belong[MAXN];
bool vis[MAXN]; inline void add(int x, int y)
{
to[cnt] = y;
next[cnt] = head[x];
head[x] = cnt++;
} inline bool find(int u)
{
int i, v;
for(i = head[u]; i != -; i = next[i])
{
v = to[i];
if(!vis[v])
{
vis[v] = ;
if(!belong[v] || find(belong[v]))
{
belong[v] = u;
return ;
}
}
}
return ;
} int main()
{
int i, x, y;
scanf("%d %d", &n, &k);
M(-, head);
for(i = ; i <= k; i++)
{
scanf("%d %d", &x, &y);
add(x, y);
}
for(i = ; i <= n; i++)
{
M(, vis);
if(find(i)) ans++;
}
printf("%d", ans);
return ;
}
最新文章
- 关于redis启动流程介绍
- jquery 时间运算、格式化的方法扩张
- C++语言-04-重载
- XAF使用数据库访问层缓存的提升性能
- 抽象类 接口 虚函数(C++模拟,个人见解)
- 【转】纯 CSS 实现高度与宽度成比例的效果
- DPC定时器
- HeadFirst设计模式 之 C++实现(二):Observer(观察者模式)
- 如何在Eclipse中开发并调试自己的插件(或者说如何将自己的代码插件化)
- 「操作系统」: Conditional Move Instructions(trap)
- Hibernate与Sleep的区别
- 使用WebView监控网页加载状况,PerformanceMonitor,WebViewClient生命周期
- Git命令(1)
- CentOS安装node.js-8.11.1+替换淘宝NPM镜像
- triplet loss 在深度学习中主要应用在什么地方?有什么明显的优势?
- django项目 报错:ImportError: cannot import name choice
- 安装python3
- mac 下 通过 brew 安装 MariaDB
- spring jpa 动态查询(Specification)
- PlantUML windows android
热门文章
- Properties没有被注意的地方
- spoj GCJ1C09C Bribe the Prisoners
- 成为Android高手必须掌握的8项基本要求
- PHP获取时间总结
- 【HEVC帧间预测论文】P1.2 An Efficient Inter Mode Decision Approach for H.264 Video Codin
- JavaScript 字符串与数字的相互转换
- Redhat5 安装序列号及版本说明
- Python 风格规范
- Unity3D windows平台视频录制录屏插件 UnityRecorder
- Django请求,响应,ajax以及CSRF问题