棋盤覆蓋 最大匹配

2021-09-01 12:43:42 字數 606 閱讀 6428

題目描述

給出一張nn(n<=100)的西洋棋棋盤,其中被刪除了一些點,問可以使用多少12的多公尺諾骨牌進行掩蓋。

輸入格式

第一行為n,m(表示有m個刪除的格仔)

第二行到m+1行為x,y,分別表示刪除格仔所在的位置

x為第x行

y為第y列 

輸出格式

乙個數,即最大覆蓋格數

#include#define n 105

#define m n*n*2

using namespace std;

int map[n][n],n,m,ans;

int first[n],next[m],to[m],tot;

int match[m],vis[m];

void add(int x,int y)

bool find(int x)

}}return false;

}int main()

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

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

printf("%d",ans/2); return 0;

}

棋盤覆蓋 最大流求解最大匹配

乙個二分圖最大匹配的問題,依然是分成兩部分,數字座標和為奇數的為一部分,和為偶數的為另一部分。這兩部分各自內部沒有連線,可以作為二分圖。二分圖最大匹配可以用最大流解決。可以引進乙個源點s ss,從s ss出發向二分圖的左部分連線 有向邊 把從左部分連向右部分的雙向邊換成從左連向右邊的單向邊,然後從二...

最小點覆蓋 最大匹配證明

1.最大匹配裡的邊,每一條邊都需要使用頂點覆蓋,也就是說最小點覆蓋大於等於最大匹配數 2.我們任取乙個最大匹配,將在最大匹配內的點染成藍色,不在最大匹配內的點染成黑色 顯然,不可能有邊的兩個端點都是黑色,也就是說每條邊都至少有乙個藍色點.我們只需選擇藍色點即可,考慮在每條匹配邊中只選乙個藍點。選擇藍...

棋盤覆蓋問題

source code include include include using namespace std const int n 1024 int board n n count void cover int sx,int sy,int cx,int cy,int size,int cx1,i...