杭电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 }
时间: 2024-11-07 22:02:21

杭电2064----过山车『匈牙利算法』的相关文章

杭电 2063 过山车

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9749    Accepted Submission(s): 4296 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

杭电oj_2063——过山车(java实现)

原题链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063 思路: 一开始用贪心做:按每一个女孩子期望搭档的人的数量将数组排序,然后优先选择期望数量少的,但是在oj上WA了(没想通为啥不行,有会的大佬还望指点/拜托) 然后就在网上看博客,看到大家都是用“匈牙利算法”做的,以前没听过,长知识了/捂脸 总结匈牙利算法本身:优先选择候选数据的第一个,然后能让就让——让的意思是自己选取下一个,将原来的腾给新的请求者,如果自己都没得选了,则不让(貌似也是贪心的

hdu 2063 过山车【匈牙利算法】(经典)

<题目链接> RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做partner和她同坐.但是,每个女孩都有各自的想法,举个例子把,Rabbit只愿意和XHD或PQK做partner,Grass只愿意和linle或LL做partner,PrincessSnow愿意和水域浪子或伪酷儿做partner.考虑到经费问题,boss刘决定只让找到partner的人去坐过山车,其他的人,嘿嘿,就站

hdu 2063 过山车 (最大匹配 匈牙利算法模板)

匈牙利算法是由匈牙利数学家Edmonds于1965年提出,因而得名.匈牙利算法是基于Hall定理中充分性证明的思想,它是部图匹配最常见的算法,该算法的核心就是寻找增广路径,它是一种用增广路径求二分图最大匹配的算法. 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2063 题目大意: 中文题目,点进去马上知道. 解题思路: 这道题目就是求最大匹配数目,直接套用匈牙利算法模板,这个算法大概原则就是:有机会上,没有机会创造机会也要上. 代码: 1 #i

南阳239----月老的难题『匈牙利算法』

1 /* 2 匈牙利算法模版题 3 邻接表实现,邻接矩阵超时 4 最大匹配问题 5 */ 6 #include <cstdio> 7 #include <vector> 8 #include <cstring> 9 using namespace std; 10 const int maxn = 505; 11 vector<int> v[maxn];//x = v[i][j]表示i可以与x进行匹配 12 int vis[maxn],match[maxn];

杭电ACM1285----确定比赛名次『拓扑排序』

1 //裸拓扑排序,注意先输出比较小的数,使用优先队列即可 2 #include <cstdio> 3 #include <vector> 4 #include <cstring> 5 #include <queue> 6 #include <algorithm> 7 using namespace std; 8 const int maxn = 505; 9 vector<int> v[maxn]; 10 priority_queu

杭电2064

1 #include<stdio.h> 2 3 long long hlt(long long n) 4 { 5 long long t; 6 if(n==1) 7 t=2; 8 else 9 t=2+3*hlt(n-1); 10 return t; 11 } 12 int main() 13 { 14 int n; 15 while(~scanf("%d",&n)) 16 printf("%lld\n",hlt(n)); 17 }

杭电2063--过山车(二分匹配)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14306    Accepted Submission(s): 6319 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

过山车(杭电2063)

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11503    Accepted Submission(s): 5062 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做pa