題意:乙個矩形中,有n個城市』*』,現在這n個城市都要覆蓋無線,若放置乙個基站,那麼它至多可以覆蓋相鄰的兩個城市。
問至少放置多少個基站才能使得所有的城市都覆蓋無線?
思路:每個城市才是要構造的二分圖的頂點,先把每個*用數字1-n標記起來,然後構造無向二分圖,無向二分圖的構造需要拆點,即12之間的雙向邊要拆成兩條有向邊,1—>2',2—>1'。且點集(1,2)(2',1')分別屬於二分圖的兩個頂點集v1,v2。再跑一遍匈牙利,結果就是 「頂點數—最大匹配數/2」。
二分圖的一點小知識:
最大匹配: 圖中包含邊數最多的匹配稱為圖的最大匹配。
完美匹配: 如果所有點都在匹配邊上,稱這個最大匹配是完美匹配。
最小覆蓋: 最小覆蓋要求用最少的點(x集合或y集合的都行)讓每條邊都至少和其中乙個點關聯。可以證明:最少的點(即覆蓋數)=最大匹配數
最小路徑覆蓋:
用盡量少的不相交簡單路徑覆蓋有向無環圖g的所有結點。解決此類問題可以建立乙個二分圖模型。把所有頂點i拆成兩個:x結點集中的i和y結點集中的i',如果有邊i->j,則在二分圖中引入邊i->j',設二分圖最大匹配為m,則結果就是n-m。
最大獨立集問題:
在n個點的圖g中選出m個點,使這m個點兩兩之間沒有邊.求m最大值.
如果圖g滿足二分圖條件,則可以用二分圖匹配來做.最大獨立集點數 = n - 最大匹配數。
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #includeview code8 #include 9 #include 10 #include 11 #include 12 #include 13 #include
14 #include 15 #include 16
#define x first
17#define y second
18#define pb push_back
19#define mp make_pair
20#define lson l,m,rt*2
21#define rson m+1,r,rt*2+1
22#define mt(a,b) memset(a,b,sizeof(a))
23using
namespace
std;
24 typedef long
long
ll;25
//const double pi = acos(-1);
26const
int n=4e2+10;27
const ll mod=1e9+7;28
const
int inf = 0x3f3f3f3f;29
const ll inf=0x3f3f3f3f3f3f3f3fll;
30int
un,vn,n;
31int
g[n][n];
32int
linker[n];
33bool
used[n];
34char
s[n][n];
35int
vis[n][n];
36bool dfs(int
u)3748}
49}50return
false;51
}52inthungary()
5361
return
res;62}
63int
main()
6483
for(int i=0;i)
8492}93
}94for(int i=0;i)
95105
if(i-1>=0&&vis[i-1
][j])
106110
if(j+11])
111115
if(j-1>=0&&vis[i][j-1
])116
120}
121}
122}
123 un=vn=k;
124 cout<2-1
<
125}
126#ifdef local
127 cerr << "
time:
"<< (ll) clock() * 1000 / clocks_per_sec << "ms"
<
128#endif
129 }
(拆點 最小路徑覆蓋) bzoj 2150
time limit 10 sec memory limit 259 mb submit 518 solved 298 submit status discuss lanzerb的部落在a國的上部,他們不滿天寒地凍的環境,於是準備向a國的下部征戰來獲得更大的領土。a國是乙個m n的矩陣,其中某些地方...
poj 3020 最小邊覆蓋與最大匹配 匈牙利演算法
做了一些題之後感覺自己的知識儲備真的太少了,很多東西都不知道 題目大意 乙個矩形中,有n個城市 現在這n個城市都要覆蓋無線,若放置乙個基站,那麼它至多可以覆蓋相鄰的兩個城市。問至少放置多少個基站才能使得所有的城市都覆蓋無線?解題思路 思前想後,依稀可以認為是一道求二分圖的最小路徑覆蓋問題 注意不是最...
最小路徑覆蓋問題(最小路徑覆蓋)
本題題目描述可以發現很明顯的最小路徑覆蓋問題,又因為最小路徑覆蓋 節點數 二分圖最大匹配數,所以本題可以用匈牙利演算法求出二分圖最大匹配數,也可以向第一題那樣用網路流模型求出最大匹配數。本題建模時不同在於,每個點要分成兩個點,乙個為起點,乙個為終點,再來求二分圖最大匹配。然後麻煩就在於本題也要輸出路...