POJ3041最小點覆蓋

2021-07-22 09:02:25 字數 760 閱讀 7931

頂點覆蓋:g中的任意邊都至少有乙個端點屬於s的頂點幾何 s 屬於 v

最小頂點覆蓋,就是盡可能少的選出一些點構成集合s,使得圖g中任意邊,都至少又乙個端點屬於s

每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。

主要是構圖:將每一行當成乙個點,構成集合1, 每一列也當成乙個點,構成集合2;每乙個障礙物的位置座標將集合1與集合2中的點連線起來,也就是將每乙個障礙物作為連線節點的邊。這樣可以輕易的得出本題是乙個最小點覆蓋的問題,假設1個行節點覆蓋了5個列節點,即這個行節點與這5個列節點間有5條邊(即五個障礙物),由於這5條邊都被那個行節點覆蓋,即表明這5個障礙物都在同一列上,於是可以一顆炸彈全部清除,而本題也就轉化成求最小點覆蓋數的問題。

又有乙個定理是:最小點覆蓋數 = 最大匹配數, 所以此題轉化成求最大匹配數。

摘自:

匈牙利演算法:

#include#include#include#include#includeusing namespace std;

typedef long long ll;

int g[555][555];

bool visit[10002];

int match[10002];

int n;

bool path(int start)}}

return false;

}int main()

result = 0;

for(int i=1;i<=n;i++)

cout<

poj3041 最小點覆蓋

題目問的是使用 一次可以摧毀一行或一列的隕石,最少使用多少次?這個是求最小點覆蓋的問題,也就是問最少多少點可以覆蓋所有的邊。然後最小點覆蓋又可以等於二分圖的最大匹配,所以就建圖求最大匹配 這題 建圖的用的隕石的x座標和y座標,把隕石的x座標集合和y座標集合作為2個點集,然後把每乙個隕石對應的x,y連...

poj3041 最小點覆蓋

題目問的是使用 一次可以摧毀一行或一列的隕石,最少使用多少次?這個是求最小點覆蓋的問題,也就是問最少多少點可以覆蓋所有的邊。然後最小點覆蓋又可以等於二分圖的最大匹配,所以就建圖求最大匹配 這題 建圖的用的隕石的x座標和y座標,把隕石的x座標集合和y座標集合作為2個點集,然後把每乙個隕石對應的x,y連...

poj 3041 最小點覆蓋 最大匹配

詳細講解 include include include includeusing namespace std int k,n int visit 55000 int tot vectorcoll 55000 原本開小runtime error了,所以就開了個大的,ac了。int from 5500...