ZOJ 1654 二分匹配基礎題

2021-09-08 16:54:08 字數 1079 閱讀 2538

題意:給你一副圖, 有草地(*),空地(o)和牆(#),空地上可以放機械人, 機械人向上下左右4個方向開槍(槍不能穿牆),問你在所有機械人都不相互攻擊的情況下能放的最多的機器人數。

思路:這是一類經典題的衍化,如果沒有牆,我們會將行和列看成兩列點陣,然後就可以用二分匹配解。

現在有牆怎麼辦呢, 把某一行或列(有牆的拆分成多個區域,可以看成多個行或列), 拆好以後更沒有牆的做法一樣了。

#include #include #include #include using namespace std;

const int maxn = 1505;

vector edge[maxn]; //記錄以左排點為起點的單向邊

int pre[maxn]; //右點陣的大小

bool vis[maxn]; //右點陣的大小

int n, m;

bool dfs(int u)

} return 0;

}char mp[51][51];

int num[51][51];

int nx, ny, x[maxn][maxn], y[maxn][maxn];

int main()

memset(y, -1, sizeof(y));

ny = 0;

for(j = 0; j < m; j++)

for(i = 0; i < nx; i++) edge[i].clear();

for(i = 0; i < n; i++)

for(j = 0; j < m; j++)

if(mp[i][j] == 'o')

edge[x[i][j]].push_back(y[i][j]);

memset(pre, -1, sizeof(int)*ny);

//建邊

int cnt = 0;

for(i = 0; i < nx; i++)

printf("case :%d\n%d\n", ca++, cnt);

} return 0;

}

二分 二分匹配

給了乙個矩陣 n行m列 選n個數 要保證這n個數不在同行同列,計算出第k大的數最小 二分答案,然後我們對於每個a i j mid的我們就i和j建立一條邊 然後二分求最大匹配必須大於等於n k 1 因為是第k大 而不是第k小 坑了好久才發現 include include include includ...

二分匹配演算法

匈牙利演算法求二分匹配 下 include includeusing namespace std int v 頂點數 vectorg max v 圖的鄰接表表示 int match max v 所匹配的頂點 bool used max v dfs 中用到的訪問標記 向圖中增加一條連線 u 和 v 的...

過山車 (二分匹配)

rpg girls今天和大家一起去遊樂場玩,終於可以坐上夢寐以求的過山車了。可是,過山車的每一排只有兩個座位,而且還有條不成文的規矩,就是每個女生必須找個個男生做partner和她同坐。但是,每個女孩都有各自的想法,舉個例子把,rabbit只願意和xhd或pqk做partner,grass只願意和l...