poj 1258 -- Asteroids

Asteroids

Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 14426   Accepted: 7851

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

第一道最大匹配题。行与列匹配。其实匹配到的点就是要消除的那个点的所在行或列。 用到匈牙利算法。

 1 /*======================================================================
 2  *           Author :   kevin
 3  *         Filename :   Asteroids.cpp
 4  *       Creat time :   2014-07-13 08:51
 5  *      Description :
 6  ========================================================================*/
 7 #include <iostream>
 8 #include <algorithm>
 9 #include <cstdio>
10 #include <cstring>
11 #include <queue>
12 #include <cmath>
13 #define clr(a,b) memset(a,b,sizeof(a))
14 #define M 550
15
16 using namespace std;
17
18 int g[M][M];
19 int n,k,used[M],linker[M];
20 bool DFS(int u)
21 {
22     for(int v = 0; v < n; v++){
23         if(g[u][v] && !used[v]){
24             used[v] = 1;
25             if(linker[v] == -1 || DFS(linker[v])){
26                 linker[v] = u;
27                 return true;
28             }
29         }
30     }
31     return false;
32 }
33 int MaxMatch()
34 {
35     int res = 0;
36     clr(linker,-1);
37     for(int u = 0; u < n; u++){
38         clr(used,0);
39         if(DFS(u)) res++;
40     }
41     return res;
42 }
43 int main(int argc,char *argv[])
44 {
45     while(scanf("%d%d",&n,&k)!=EOF){
46         int a,b;
47         clr(g,0);
48         for(int i = 0; i < k; i++){
49             scanf("%d%d",&a,&b);
50             g[a-1][b-1] = 1;
51         }
52         int ans = MaxMatch();
53         printf("%d\n",ans);
54     }
55     return 0;
56 }

poj 1258 -- Asteroids

时间: 2024-10-13 08:10:04

poj 1258 -- Asteroids的相关文章

POJ 3041 Asteroids (匈牙利算法)

Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14388 Accepted: 7828 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 astero

各种最小生成树。 HDU 1863 HDU 1301 POJ 1258

畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 18811    Accepted Submission(s): 7981 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).经过调查评估,得到的统计表中列出

poj 1258 Agri-Net 解题报告

题目链接:http://poj.org/problem?id=1258 题目意思:给出 n 个 farm,每个farm 之间通过一定数量的fiber 相连,问使得所有farm 直接或间接连通的 最少 fiber 数是多少. 赤裸裸的最小生成树,用prim做的. 有个地方写错,wa 了 几次. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 5 const int farm_num = 10000

rwkj 1505 poj 1258 10.1.5.253 1505

#include <iostream>// poj 1258 10.1.5.253 1505using namespace std; #define N 105 // 顶点的最大个数 (多写 int a[N][N],low[N],n,ans;int min(int x,int y){ return x<y?x:y; } void prim(int u0) { int i,j,m,k; ans=0; // for (i=1;i<n;i++) low[i]=a[u0][i]; // l

poj 1258

题意:给n*n矩阵 表示个点个边  求最小生成树 思路:Kruskal 算法 //:简单介绍一下题意.农民要建立互联网络,目的使村庄里所有的农民连上网, //并且总费用最小.多组数据,每组数据给出一个n,然后给出n * n大小的无向图的邻接矩阵表示,值表示边权. //要求输出最小生成树的权值和. #include<iostream> #include<cstring> using namespace std; int map[101][101]; int dist[101]; in

poj 1258 kruscal

//hnldyhy(303882171) 8:54:04 #include <iostream> // poj 1258#include <algorithm> using namespace std; #define N 105int p[N];void init (int n){ for (int i=1;i<=n;i++) p[i]=i; }int find(int x){ if (p[x]==x)return x; else return p[x]=find(p[x]

poj 3041——Asteroids

poj       3041——Asteroids Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 22604   Accepted: 12247 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 g

[2016-04-14][POJ][1258][Agri-Net]

时间:2016-04-14 20:36:55 星期四 题目编号:[2016-04-14][POJ][1258][Agri-Net] 题目大意:求最小生成树 分析:直接prim算法 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn = 100 + 10 ; int g[maxn][maxn],vis[maxn],lowc[maxn]; int

二分图匹配(匈牙利算法) POJ 3041 Asteroids

题目传送门 1 /* 2 题意:每次能消灭一行或一列的障碍物,要求最少的次数. 3 匈牙利算法:把行和列看做两个集合,当有障碍物连接时连一条边,问题转换为最小点覆盖数==二分图最大匹配数 4 趣味入门:http://blog.csdn.net/dark_scope/article/details/8880547 5 */ 6 #include <cstdio> 7 #include <algorithm> 8 #include <cstring> 9 #include