HDU 1281 棋盤遊戲 二分匹配

2021-07-16 02:13:56 字數 588 閱讀 5277

在棋盤裡放盡可能多的車,讓他們不能互相攻擊,有一些格仔不能放車,但不影響他們互相攻擊。問最多能放多少個車,並且求出有多少個重要點,重要點就是如果不在這個點上放車,就不能盡可能的多放棋子。

先求出最大匹配數,然後列舉去掉每乙個格仔,如果得到的匹配數小於最大匹配數,重要點就多乙個。

#include#include#include#includeusing namespace std;

const int maxn = 1550;

int e[maxn][maxn],match[maxn],book[maxn];

int n,m,k;

struct node

p[10010];

int dfs(int u)}}

return 0;

}int solve()

return sum;

}int main(void)

{ int i,j,k,t1,t2;

int c = 1;

while(scanf("%d%d%d",&n,&m,&k)==3)

{memset(e,0,sizeof(e));

for(i=0;i

hdu 1281 棋盤遊戲

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

HDU 1281 棋盤遊戲

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

HDU 1281 棋盤遊戲

中問題,就不說題意了。解 典型的行列匹配問題。車 放在同一行或列肯定不行,那麼我們抽象出x集合為行號,y集合為列號,由於x集合中頂點不能連邊,y集合中頂點不能連邊。只有x集合與y集合才能連邊,那就是二分圖咯。我們把能放棋的點 i,j 連條邊 i j 因為對於某一行,它有m列,但是這一行他最多放乙個棋...