码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 2063 过山车 (最大匹配,男女配对,二分图)

时间:2015-06-30 21:35:07      阅读:102      评论:0      收藏:0      [点我收藏+]

标签:

 

题意:中文题目

思路:匈牙利算法解决二分图最大匹配问题。

 

技术分享
 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 const int N=505;
 4 int mapp[N][N]; //矩阵
 5 int girl[N];    //记录该女已分配的男编号
 6 int vis[N];     //标记是否已经尝试为其另分配
 7 int n, a, b, k, m;
 8 
 9 int find(int x)
10 {
11     for(int i=1; i<=m; i++) //扫描所有妹子
12     {
13         if(mapp[x][i]&&!vis[i])  //有暧昧,未尝试为其另分配
14         {
15             vis[i]=1;   //已尝试
16             if( !girl[i] || find(girl[i]) )
17             {
18                 girl[i]=x;
19                 return true;
20             }
21         }
22     }
23     return false;
24 }
25 
26 int hungary()
27 {
28     int cnt=0;
29     for(int i=1; i<=n; i++)
30     {
31         memset(vis,0,sizeof(vis));
32         if(find(i))    cnt++;
33     }
34     return cnt;
35 }
36 
37 int main()
38 {
39     freopen("input.txt", "r", stdin);
40 
41     while(scanf("%d",&k), k)
42     {
43         memset(vis,0,sizeof(vis));
44         memset(mapp,0,sizeof(mapp));
45         memset(girl,0,sizeof(girl));
46         scanf("%d%d",&m,&n);
47 
48         for(int i=0; i<k; i++)  //2分图
49         {
50             scanf("%d%d",&b,&a);
51             mapp[a][b]=1;
52         }
53         printf("%d\n",hungary());
54     }
55     return 0;
56 }
AC代码

 

HDU 2063 过山车 (最大匹配,男女配对,二分图)

标签:

原文地址:http://www.cnblogs.com/xcw0754/p/4611444.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!