POJ 3041 Asteroids(最小點覆蓋)

2021-07-11 14:00:11 字數 1177 閱讀 8735

poj 3041 asteroids

題意:

給出m個點的所在行列,每次可以選擇清除一行或者一列,問清除這些點的最小操作次數是多少?

分析:

將所有點的行看成一組,所有的點列看成一組,對每個點的行和列建一條邊,每條邊就代表乙個點,清除一行或者一列可以看成選擇二分圖中的乙個點,清除所有的點,就相當於選擇二分圖中的若干點連線所有的邊。

這樣一來就符合最小點覆蓋的定義了!再根據最小點覆蓋數=最大匹配數,利用匈牙利演算法即可。

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define ios ios_base::sync_with_stdio(0); cin.tie(0);

using

namespace

std;

typedef

long

long ll;

const

int max_n = 510;

int n, m, total, cntx, cnty;

int head[max_n], vis[max_n], match[max_n];

struct edge

edge(int _to,int _next) : to(_to), next(_next)

}edge[max_n * max_n];

inline

void addedge(int from, int to)

inline

bool dfs(int u)}}

return

false;

}inline

void hungary()

cout

<< ans << endl;

}int main()

if(mpy.find(y) == mpy.end())

addedge(mpx[x], mpy[y]);

}hungary();

}return

0;}

POJ 3041 Asteroids 最小覆蓋數

題目大意 一輛宇宙飛船在乙個小行星帶中,你知道,這很危險。他有一種 可以清除掉一行或一列的小行星。問把小行星全部清除最少的 使用次數。思路 因為每次可以清除掉一行或者一列,所以可以把行和列建成圖,行和列為邊,因為最後要全部清除,也就是說所有邊都使用過,正好就是最小覆蓋數。最小覆蓋數 最大匹配。inc...

POJ3041 最小頂點覆蓋

題意 給你乙個n n 的矩陣,和x所在的座標,問你最少放多少個 可以把圖里的所有x都覆蓋,每個 可以覆蓋一行,或者一列。思路 最小頂點覆蓋,最小頂點覆蓋 二分匹配,每一行最多放乙個,每一列最多放乙個,對於每乙個點,他只要被一行或者一列照應就行了。所以直接把x所在的點的行和列連線在一起,二分後對於當前...

poj 3041 Asteroids 最大匹配

把每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。可以放炸彈炸掉成行或者成列的障礙物!主要是構圖 將每一行當成乙個點,構成集合1,每一列也當成乙個點,構成集合2 每乙個障礙物的位置座標將集合1與集合2中的點連線起來,也就是將每乙個障礙物作為連線節點的邊。這...