題目:月老的難題
時間限制: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和他 她的室友都十分...