POJ:3041-Asteroids(匈牙利算法模板)
来源:互联网 发布:热血江湖人工智能披风 编辑:程序博客网 时间:2024/05/21 18:33
传送门:http://poj.org/problem?id=3041
Asteroids
Time Limit: 1000MS Memory Limit: 65536K
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 asteroids (1 <= K <= 10,000), which are conveniently located at the lattice points of the grid.
Fortunately, Bessie has a powerful weapon that can vaporize all the asteroids in any given row or column of the grid with a single shot.This weapon is quite expensive, so she wishes to use it sparingly.Given the location of all the asteroids in the field, find the minimum number of shots Bessie needs to fire to eliminate all of the asteroids.
Input
- Line 1: Two integers N and K, separated by a single space.
- Lines 2..K+1: Each line contains two space-separated integers R and C (1 <= R, C <= N) denoting the row and column coordinates of an asteroid, respectively.
Output
- Line 1: The integer representing the minimum number of times Bessie must shoot.
Sample Input
3 4
1 1
1 3
2 2
3 2
Sample Output
2
Hint
INPUT DETAILS:
The following diagram represents the data, where “X” is an asteroid and “.” is empty space:
X.X
.X.
.X.
OUTPUT DETAILS:
Bessie may fire across row 1 to destroy the asteroids at (1,1) and (1,3), and then she may fire down column 2 to destroy the asteroids at (2,2) and (3,2).
解题心得:
题意就是要将图中的 X消去,每次可以消去一行或者消去一列。可以将行和列看做一个节点,而一个点的坐标可以看成在x和y节点上连接的一条边,要求用最小的边数目将已经覆盖的节点全部覆盖。说了那么多就是一个裸地匈牙利算法。
很好懂的匈牙利算法传送门:这里写链接内容
- 匈牙利算法的核心就在一个可不可以让出一个位置,dfs可以看成向上递归,只要已经安排的点有一个可以让出一个位置就可以安放当前。
#include<stdio.h>#include<string.h>using namespace std;const int maxn = 510;int n,m;int match[maxn];bool maps[maxn][maxn],vis[maxn];void init(){ memset(maps,0,sizeof(maps)); memset(match,0,sizeof(match)); while(m--) { int x,y; scanf("%d%d",&x,&y); maps[x][y] = true; }}bool dfs(int x){ for(int i=1;i<=n;i++) { if(maps[x][i] && !vis[i]) { vis[i] = true; if(match[i] == 0 || dfs(match[i]))//可以让出就ans++,不然就不能连接 { match[i] = x; return true; } } } return false;}int get_ans(){ int ans = 0; for(int i=1;i<=n;i++) { memset(vis,0,sizeof(vis)); if(dfs(i)) ans++; } return ans;}int main(){ while(scanf("%d%d",&n,&m) != EOF) { init(); int ans = get_ans(); printf("%d\n",ans); } return 0;}
- POJ:3041-Asteroids(匈牙利算法模板)
- POJ 3041 Asteroids(匈牙利算法模板)
- POJ 3041 Asteroids 匈牙利算法模板题
- POJ 3041 Asteroids(最小顶点覆盖,匈牙利算法模板)
- POJ 3041 Asteroids (匈牙利算法)
- POJ 3041 Asteroids (匈牙利算法)
- POJ-3041 Asteroids(匈牙利算法)
- POJ 3041 Asteroids(匈牙利算法)
- POJ 3041 Asteroids(匈牙利算法)
- poj 3041 Asteroids 匈牙利算法
- POJ 3041 Asteroids (匈牙利算法)
- poj 3041 Asteroids 【匈牙利算法】
- POJ 3041 Asteroids 匈牙利算法
- POJ 3041 Asteroids 匈牙利算法
- Asteroids(POJ 匈牙利算法)
- poj 3041 Asteroids 二分匹配 匈牙利算法 模板题
- POJ 3041 Asteroids(二分图匹配+匈牙利算法)
- poj 3041 Asteroids【二分图】【匈牙利算法】
- yii2 展示静态页面
- oracle bfilename <Value Error>
- 【Mysql】mysql 事务未提交导致死锁 Lock wait timeout exceeded; try restarting transaction 解决办法
- SQL Server 中WITH (NOLOCK)浅析
- mysql5.6深入解决编码乱码问题
- POJ:3041-Asteroids(匈牙利算法模板)
- 关于微信公众号获取token的学习总结
- 北京云栖大会MaxCompute又出大招,Python UDF抢先体验!
- MySQL添加新用户、为用户创建数据库、为新用户分配权限
- 深度学习—加快梯度下降收敛速度(一):mini-batch、Stochastic gradient descent
- 判断使用的代理IP是否有用
- 设计模式——观察者模式
- windows数据库mysql安装及C++连接
- 演讲实录 | Service Mesh 时代的选边与站队(附PPT下载)