HDU 1281 棋盤遊戲

2021-07-16 04:17:00 字數 800 閱讀 7636

中問題,就不說題意了。

解:典型的行列匹配問題。「車」放在同一行或列肯定不行,那麼我們抽象出x集合為行號,y集合為列號,由於x集合中頂點不能連邊,y集合中頂點不能連邊。只有x集合與y集合才能連邊,那就是二分圖咯。。。

我們把能放棋的點(i,j)連條邊(i->j)。因為對於某一行,它有m列,但是這一行他最多放乙個棋子,所以求得最大二分匹配就是能放的最多棋子的數目。

第二個問是求哪些是關鍵點。就是說不要這個點,匹配數減少。

我們只需要列舉刪除哪個點,然後跑二分匹配,如果答案比之前最大匹配減少了,說明這是個關鍵點。

刪除點並不是真正的刪除,只需要標記即可。

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

#define maxn 1005

#define ll long long

#define inf 0x3f7f7f7f

int k,m,n;

vectorg[maxn];

int vis[maxn],r[maxn];

struct point

p[maxn*10];

bool match(int id,int xx,int yy)//(xx,yy)是標記刪除的點

{ int sz=g[id].size();

for(int i=0;i

hdu 1281 棋盤遊戲

題意 在保證盡量多的 車 的前提下,棋盤裡有些格仔是可以避開的,也就是說,不在這些格仔上放車,也可以保證盡量多的 車 被放下 車不互相攻擊 但是某些格仔若不放子,就無法保證放盡量多的 車 這樣的格仔被稱做重要點。算出有多少個這樣的重要點。解 建立乙個二分圖,若 i,j 可以放旗子就連邊,求出最小點覆...

HDU 1281 棋盤遊戲

思路 參考的大神的,把棋盤的橫座標看做x,縱座標看做y,棋盤中的乙個格仔看做二分圖中兩個集合的一條邊,題目的條件是任意兩個 車 不能在同一行且不在同一列,也就是兩個集合中每個點都只能連線一條邊,這正好滿足最大匹配,然後列舉每個位置不放 車 的情況下,得出的最大匹配是否等於放 車 時的解,如果不等於,...

hdu 1281棋盤遊戲 匈牙利演算法

題意 從給出的位置中確定最多可以放置多少 車 再確定 若不在 哪些位置上放置 將會減少放置棋子的數量 思路 第一步 能放置棋子的位置 其橫縱座標都不能相同,橫縱座標看做兩個集合 x集合,y集合 給出的座標點看做是x集合y集合中兩點的連線 二分圖的邊 所以現在 題意抽象成求二分圖最大匹配數 第二步 依...