Asteroids
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16379   Accepted: 8930

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

 
代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include <iostream>
#include <string>
#include <stack>
#include <queue>
#include <algorithm>
#define N 500+20
#define INF 0x3f3f3f3f using namespace std;
int n, m;
int map[N][N];
int link[N];
bool vis[N]; bool match( int u )
{
for(int i=1; i<=n; i++)
{
if(vis[i]==false && map[u][i]==1 )
{
vis[i]=true;
if(link[i]==-1 || match(link[i]) )
{
link[i]=u;
return true;
}
}
}
return false;
} int main()
{
int i, j, k;
int u, v;
scanf("%d %d", &n, &m);
memset(map, 0, sizeof(map)); for(i=0; i<m; i++ ){
scanf("%d %d", &u, &v);
map[u][v] = 1;
}
memset(link, -1, sizeof(link));
int ans=0; for(int i=1; i<=n; i++)
{
memset(vis, false, sizeof(vis));
if(match(i))
ans++; }
printf("%d\n", ans );
return 0;
}

最新文章

  1. mac-改造你的terminal
  2. RPM方式安装MySQL5.5.48 (Aliyun CentOS 7.0 &amp; 卸载MySQL5.7)
  3. hdu 1175冒牌连连看
  4. Python isdigit()方法
  5. 转 How to install XenServer Tools – Linux(forward)
  6. 2013-07-26 IT 要闻速记快想
  7. Windows操作系统常用快捷键
  8. uva 10004 Bicoloring(dfs二分染色,和hdu 4751代码差不多)
  9. oschina程序开发
  10. Vue安装依赖npm install时报错问题解决方法
  11. [SQLite]SQLite URI配置
  12. 为 docker 中的 nginx 配置 https
  13. python对 if __name__==&#39;__main__&#39;的理解
  14. Deep Learning Tutorial - Convolutional Neural Networks(LENET)
  15. mybatis环境配置与入门例子
  16. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十九):推送avro格式数据到topic,并使用spark structured streaming接收topic解析avro数据
  17. oracle中实现md5加密
  18. 在阿里云容器服务上开发基于Docker的Spring Cloud微服务应用
  19. java 监控工具 jconsole
  20. [BZOJ 2839]集合计数

热门文章

  1. 【2048小游戏】——CSS/原生js爬坑之纯CSS模态对话框&amp;游戏结束
  2. 关于阿里 weex 的使用与案例
  3. JNI开发(2)——开发实战
  4. 【日常学习】【并查集+map】codevs2639 约会计划题解
  5. Mysql processlist命令
  6. .net mvc项目 ajax
  7. java equals与==区别
  8. 相机标准之onvif---开放型网络视频接口论坛onvif 简介
  9. CF459C Pashmak and Buses 打印全排列
  10. 【BZOJ4173】数学 欧拉函数神题