POJ3041 Asteroids(最小點覆蓋)

2022-08-21 02:57:08 字數 735 閱讀 9960

比較經典的最小點覆蓋,對於障礙物(i,j),我們可以選擇消第i行,也可以選擇消第j列,所以所有障礙物橫縱座標連邊。

問最少消多少次,就是問最大能匹配幾次,轉化為最大匹配即可。

跑一遍網路流或匈牙利即可。

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

const int maxn=1010;

const int maxm=2e4+10;

const int inf=0x3f3f3f3f;

int n,m,cnt,s,t;

int head[maxn],cur[maxn],depth[maxn];

int nxt[maxm],to[maxm],w[maxm];

bool bfs()

} }if(depth[t]==0)

return false;

return true;

}int dfs(int u,int dist)

} }return 0;

}int dinic()

return ans;

}void add(int x,int y,int z)

void add(int x,int y,int z)

int main()

printf("%d\n",dinic());

return 0;

}

POJ 3041 Asteroids 最小覆蓋數

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

POJ3041 最小頂點覆蓋

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

poj 3041 Asteroids 最大匹配

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