首页 > 代码库 > 杭电2064----过山车『匈牙利算法』
杭电2064----过山车『匈牙利算法』
1 //匈牙利算法模版题 2 #include <cstdio> 3 #include <vector> 4 #include <cstring> 5 using namespace std; 6 const int maxn = 505; 7 vector<int> v[maxn]; 8 int vis[maxn],match[maxn]; 9 bool dfs(int t) 10 { 11 for(int i = 0; i < v[t].size(); ++i) 12 { 13 int x = v[t][i]; 14 if(!vis[x]) 15 { 16 vis[x] = 1; 17 if(match[x] == -1 || dfs(match[x])) 18 {match[x] = t; return true; } 19 } 20 } 21 return false; 22 } 23 int hungary(int n) 24 { 25 int ans = 0; 26 for(int i = 1; i <= n; ++i) 27 { 28 memset(vis,0,sizeof vis); 29 if(dfs(i)) ++ans; 30 } 31 return ans; 32 } 33 int main() 34 { 35 int k,n,m,x,y; 36 while(~scanf("%d",&k) && k) 37 { 38 scanf("%d%d",&n,&m); 39 for(int i = 1; i <= n; ++i) 40 v[i].clear(); 41 memset(match,-1,sizeof match); 42 while(k--) 43 { 44 scanf("%d%d",&x,&y); 45 v[x].push_back(y); 46 } 47 printf("%d\n",hungary(n)); 48 } 49 return 0; 50 }
杭电2064----过山车『匈牙利算法』
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。