热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

poj3041Asteroids(二分图)

DescriptionBessiewantstonavigateherspaceshipthroughadangerousasteroidfieldintheshapeofanNx

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 #include
2 #include
3 #include
4 #include
5 using namespace std;
6 #define N 555
7 int map[N][N];
8 int from[N],v[N],n;
9 bool dfs(int x)
10 {
11 for (int i=1;i<=n;i++)
12 {
13 if (v[i]||!map[x][i]) continue;
14 v[i]=1;
15 if (from[i]==-1||dfs(from[i]))
16 {
17 from[i]=x;
18 return true;
19 }
20 }
21 return false;
22 }
23 int main()
24 {
25 int k,i,a,b,ans=0;
26 scanf("%d%d",&n,&k);
27 memset(map,0,sizeof(map));
28 while (k--)
29 {
30 scanf("%d%d",&a,&b);
31 map[a][b]=1;
32 }
33 memset(from,-1,sizeof(from));
34 for (i=1;i<=n;i++)
35 {
36 memset(v,0,sizeof(v));
37 ans+=dfs(i);
38 }
39 printf("%d\n",ans);
40 }

 


推荐阅读
author-avatar
智慧与财富的拥有者_678
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有