博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ 3041 Asteroids【二分图最大匹配.最小点覆盖】
阅读量:5939 次
发布时间:2019-06-19

本文共 1939 字,大约阅读时间需要 6 分钟。

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

 定理:

 1. 最小点权覆盖集=最小割=最大流
 2. 最大点权独立集=总权-最小点权覆盖集

相关证明:

分析:题意:给一个N*N的格点图,一枪可以干掉一排,问最少多少枪可以干掉所有敌人,可以把横坐标 i 纵坐标 j,看成是两个集合,求二分图最大匹配,即求最小点权覆盖。

code:

View Code
#include
#include
#define clr(x)memset(x,0,sizeof(x)) #define maxn 505 bool v[maxn]; bool g[maxn][maxn]; int link[maxn]; int n; int find(int k) {
int i; for(i=1;i<=n;i++) {
if(g[k][i]&&!v[i]) {
v[i]=1; if(link[i]==0||find(link[i])) {
link[i]=k; return 1; } } } return 0; } int main() {
int i,k,p,q,tot; while(scanf("%d%d",&n,&k)!=EOF) {
clr(g); clr(link); while(k--) {
scanf("%d%d",&p,&q); g[p][q]=1; } tot=0; for(i=1;i<=n;i++) {
clr(v); if(find(i)) tot++; } printf("%d\n",tot); } return 0; }

 

转载于:https://www.cnblogs.com/dream-wind/archive/2012/03/15/2397201.html

你可能感兴趣的文章
基于事件驱动的DDD领域驱动设计框架分享(附源代码)
查看>>
Linux备份ifcfg-eth0文件导致的网络故障问题
查看>>
2018年尾总结——稳中成长
查看>>
JFreeChart开发_用JFreeChart增强JSP报表的用户体验
查看>>
度量时间差
查看>>
apache prefork模式优化错误
查看>>
通过jsp请求Servlet来操作HBASE
查看>>
JS页面刷新保持数据不丢失
查看>>
清橙A1202&Bzoj2201:彩色圆环
查看>>
使用data pump工具的准备
查看>>
springMVC---级联属性
查看>>
get和post区别
查看>>
crontab执行shell脚本日志中出现乱码
查看>>
cmd.exe启动参数说明
查看>>
《随笔记录》20170310
查看>>
网站分析系统
查看>>
从零开始来看一下Java泛型的设计
查看>>
Shell编程基础
查看>>
Shell之Sed常用用法
查看>>
3.1
查看>>