題目描述
給出一張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...