hdu-1179 Ollivanders: Makers of Fine Wands since 382 BC.---二分图匹配模板

题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1179

题目大意:

有n个人要去买魔杖,有m根魔杖(和哈利波特去买魔杖的时候一样,是由魔杖选人)。接下来是m行,每行第一个数k是第i根魔杖可以选的人数,接着k个数表示这根魔杖选的人的编号。最后问老板最多能卖出多少根魔杖。这个赤裸裸的模版题,套下就OK了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1000 + 10;
 5 const int INF = 1e9;
 6 bool Map[maxn][maxn];
 7 int cx[maxn], cy[maxn];
 8 int cntx, cnty;
 9 bool vis[maxn];
10 bool dfs(int u)
11 {
12     for(int v = 1; v <= cnty; v++)
13     {
14         if(Map[u][v] && !vis[v])
15         {
16             vis[v] = 1;
17             if(cy[v] == -1 || dfs(cy[v]))
18             {
19                 cx[u] = v;
20                 cy[v] = u;
21                 return 1;
22             }
23         }
24     }
25     return 0;
26 }
27 int maxmatch()
28 {
29     int ans = 0;
30     memset(cx, -1, sizeof(cx));
31     memset(cy, -1, sizeof(cy));
32     for(int i = 1; i <= cntx; i++)
33     {
34         if(cx[i] == -1)
35         {
36             memset(vis, 0, sizeof(vis));
37             ans += dfs(i);
38         }
39     }
40     return ans;
41 }
42 int main()
43 {
44     int n, i, u, v;
45     while(cin >> cnty && cnty)
46     {
47         cin >> cntx;
48         memset(Map, 0, sizeof(Map));
49         for(int u = 1; u <= cntx; u++)
50         {
51             cin >> i;
52             while(i--)
53             {
54                 cin >> v;
55                 Map[u][v] = 1;
56             }
57         }
58         cout<<maxmatch()<<endl;
59     }
60     return 0;
61 }

原文地址:https://www.cnblogs.com/fzl194/p/8910064.html

时间: 2024-10-05 21:17:11

hdu-1179 Ollivanders: Makers of Fine Wands since 382 BC.---二分图匹配模板的相关文章

HDU——1179 Ollivanders: Makers of Fine Wands since 382 BC.

Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 1895    Accepted Submission(s): 1084 Problem Description In Diagon Alley ,there is only one Wand-

HDU 1179 Ollivanders: Makers of Fine Wands since 382 BC.(匈牙利算法)

Problem Description In Diagon Alley ,there is only one Wand-seller,peeling gold letters over the door read Ollivanders: Makers of Fine Wands since 382 BC.A single wand lay on a faded purple cushion in the dusty window. A tinkling bell rang somewhere

HDU 1179 Ollivanders: Makers of Fine Wands since 382 BC.(二分图匹配--匈牙利算法)

Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 1314 Accepted Submission(s): 718 Problem Description In Diagon Alley ,there is only one Wand-seller

hdu-----(1179)Ollivanders: Makers of Fine Wands since 382 BC.(二分匹配)

Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)Total Submission(s): 935    Accepted Submission(s): 523 Problem Description In Diagon Alley ,there is only one Wand-se

hdu1179——Ollivanders: Makers of Fine Wands since 382 BC.

Ollivanders: Makers of Fine Wands since 382 BC. Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others) Total Submission(s): 964    Accepted Submission(s): 539 Problem Description In Diagon Alley ,there is only one Wand-s

HDU1179_Ollivanders: Makers of Fine Wands since 382 BC.(二分图/最大匹配)

解题报告 题意: n个巫师m个魔杖,每个魔杖可以被不同的巫师使用.求多少个魔杖会被买. 思路: 二分图最大匹配简单题. #include <iostream> #include <cstring> #include <cstdio> using namespace std; int mmap[110][110],n,m,vis[110],pre[110]; int dfs(int x) { for(int i=1; i<=n; i++) { if(!vis[i]&

HPU1179 Ollivanders: Makers of Fine Wands since 382 BC.【二分图最大匹配】

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1179 题目大意: 题目太长了,简单的意思就是:有N个魔杖,M个魔法师,魔杖有多个匹配的魔法师.但是一个魔法师 只能对应一根魔杖.那么问题来了:最多有多少魔法师能得到魔棒. 思路: 做一个二分图,一边是魔杖,另一边是魔法师.相应的匹配作为二分图的边.利用匈牙利算法,求出二 分图最大匹配是多少. AC代码: #include<iostream> #include<algorithm> #

hdu1179Ollivanders: Makers of Fine Wands since 382 BC. (二分最大匹配)

Problem Description In Diagon Alley ,there is only one Wand-seller,peeling gold letters over the door read Ollivanders: Makers of Fine Wands since 382 BC.A single wand lay on a faded purple cushion in the dusty window. A tinkling bell rang somewhere

hdu 1179 最大匹配

题意:n个ren m个棍子 每个棍子可以与i个人结合 问最大有多少个结合#include<iostream> #include<cmath> using namespace std; int map[111][111]; int fa[111]; int v[111]; int n,m; int dfs(int x) { for(int i=1;i<=n;i++) { if(map[x][i]&&!v[i])//回溯时i不能再匹配 { v[i]=1; if(!