(NYoj 239)月老的難題 裸最大匹配

2021-07-15 21:01:01 字數 1284 閱讀 7715

題目:月老的難題

時間限制:1000 ms | 記憶體限制:65535 kb

難度:4

描述 月老準備給n個女孩與n個男孩牽紅線,成就一對對美好的姻緣。

現在,由於一些原因,部分男孩與女孩可能結成幸福的一家,部分可能不會結成幸福的家庭。

現在已知哪些男孩與哪些女孩如果結婚的話,可以結成幸福的家庭,月老準備促成盡可能多的幸福家庭,請你幫他找出最多可能促成的幸福家庭數量吧。

假設男孩們分別編號為1~n,女孩們也分別編號為1~n。

輸入 第一行是乙個整數t,表示測試資料的組數(1<=t<=400)

每組測試資料的第一行有兩個整數n,k,其中男孩的人數與女孩的人數都是n。(n<=500,k<=10 000)

隨後的k行,每行有兩個整數i,j表示第i個男孩與第j個女孩有可能結成幸福的家庭。(1<=i,j<=n)

輸出 對每組測試資料,輸出最多可能促成的幸福家庭數量

樣例輸入

1 3 4

1 1

1 3

2 2

3 2

樣例輸出

2分析:

這題是個裸的最匹配問題,直接用匈牙利演算法模板即可。(關於演算法有疑問可以看看我的另外講解匈牙利演算法的部落格)

ac**:

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn=510;//x集合和y集合中元素個數的最大值

int nx,ny;//x,y集合中元素的個數

//int g[maxn][maxn];//g[i][j]=1表示xi和yj可以匹配

vector

g[maxn];

int cx[maxn],cy[maxn];//cx[i]表示在求得的最大匹配中與xi匹配的y頂點,cy[i]同理

int mk[maxn];//在搜尋時記錄是否已經訪問過

int path(int u)//求增廣路,每次只能使匹配數加一}}

return0;}

int maxmatch()

}return res;

}int main()

printf("%d\n",maxmatch());

}return

0;}

NYOJ 23 取石子(一)

時間限制 3000 ms 記憶體限制 65535 kb難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 1000...

nyoj 23 取石子(一)

時間限制 3000 ms 記憶體限制 65535 kb 難度 2 描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 100...

nyoj 23 取石子(一)

描述 一天,tt在寢室閒著無聊,和同寢的人玩起了取石子遊戲,而由於條件有限,他 她們是用旺仔小饅頭當作石子。遊戲的規則是這樣的。設有一堆石子,數量為n 1 n 1000000 兩個人輪番取出其中的若干個,每次最多取m個 1 m 1000000 最先把石子取完者勝利。我們知道,tt和他 她的室友都十分...