题目链接

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

题意

有n对男女 女生去选男朋友

如果女生从来没和那个男生吵架 那么那个男生就可以当她男朋友
女生也可以选择从来没和自己闺蜜吵过架的男生当男朋友

如果 女生A和女生B是闺蜜 女生A和男生C吵过架 但是女生B和男生C从来没吵过架

那么女生A是可以选择男生C当男朋友的。

看来 讨好闺蜜是一件多么重要的事情。。

T T组数据

给出 n, m, f

有N对男女, m对从未吵架关系 f 对闺蜜关系

思路

先将m对关系 用二分图存下来

然后f对闺蜜关系 先用并查集并起来 并完后,跑一下Flyod

然后去二分匹配
匹配完一次 将匹配过的边删去 再去匹配,如果还能匹配成功 继续删边 继续匹配 匹配的次数 就是答案

AC代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <list>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>#define CLR(a, b) memset(a, (b), sizeof(a))
#define pb push_back
#define bug puts("***bug***");
#define fi first
#define se second
//#define bug
//#define gets gets_susing namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair <string, int> psi;
typedef pair <string, string> pss;
typedef pair <double, int> pdi;const double PI = acos(-1.0);
const double EI = exp(1.0);
const double eps = 1e-8;const int INF = 0x3f3f3f3f;
const int maxn = 7e3 + 5e2 + 10;
const int MOD = 6;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        const int MAXN = 110;
int uN, vN;//u,v的数目,使用前面必须赋值
int g[MAXN][MAXN];//邻接矩阵
int linker[MAXN];
bool used[MAXN];
bool dfs(int u)
{for (int v = 0; v < vN; v++)if (g[u][v] && !used[v]){used[v] = true;if (linker[v] == -1 || dfs(linker[v])){linker[v] = u;return true;}}return false;
}
int hungary()
{int res = 0;memset(linker, -1, sizeof(linker));for (int u = 0; u < uN; u++){memset(used, false, sizeof(used));if (dfs(u))res++;}return res;
}int pre[MAXN];int n, m, f;int find(int x)
{while (x != pre[x])x = pre[x];return x;
}void join(int x, int y)
{int fx = find(x), fy = find(y);if (fx != fy)pre[fx] = fy;
}void Flyod()
{for (int i = 0; i < n; i++){for (int k = 0; k < n; k++){if (find(i) == find(k)){for (int j = 0; j < n; j++)g[i][j] = g[k][j] = (g[i][j] || g[k][j]);}}}
}void clear()
{for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)g[i][j] = 0;for (int i = 0; i < n; i++)pre[i] = i;
}int main()
{int t;cin >> t;while (t--){scanf("%d%d%d", &n, &m, &f);clear();int x, y;for (int i = 0; i < m; i++){scanf("%d%d", &x, &y);x--, y--;g[x][y] = 1;}for (int i = 0; i < f; i++){scanf("%d%d", &x, &y);x--, y--;join(x, y);}Flyod();int tot = 0;uN = vN = n;int vis;while (true){vis = hungary();if (vis != n)break;tot++;for (int i = 0; i < n; i++)g[linker[i]][i] = 0;} cout << tot << endl;}
}

转载于:https://www.cnblogs.com/Dup4/p/9433079.html

HDU - 3081 Marriage Match II 【二分匹配】相关推荐

  1. HDU - 3081 Marriage Match II(二分+并查集+最大流/匈牙利删边)

    题目链接:点击查看 题目大意:n个男生和n个女生配对,配对规则如下: 每个女生都可以选择没有吵过架的男生匹配 若女生A的好朋友是女生B,且女生B没有和男生C吵过架,则女生A也可以和男生C匹配 现在问最 ...

  2. [kuangbin带你飞]专题十一 网络流\N HDU 3081 Marriage Match II

    题目描述 Presumably, you all have known the question of stable marriage match. A girl will choose a boy; ...

  3. HDU 3081 Marriage Match II【并查集+二分图最大匹配】

    大意:有n个男孩n个女孩,告诉你每个女孩喜欢哪些男孩,又告诉你女孩之间的存在一些朋友关系 一个女孩可以和她喜欢的男孩结婚也可以和她朋友喜欢的男孩结婚, 并且朋友关系可以传递 Once every gi ...

  4. HDU 3081 Marriage Match II (并查集+二分+最大流 | 并查集+二分图匹配)

    题意:n 个男生.n个女生玩游戏,每个女生都可以和她不讨厌的男生结婚,此外她的朋友如果也不讨厌这个男生,也可以和他结婚:对于女生,如果A和B是朋友,B和C是朋友,那么A和C也是朋友.每次游戏女生会找一 ...

  5. HDU3081 Marriage Match II —— 传递闭包 + 二分图最大匹配 or 传递闭包 + 二分 + 最大流...

    题目链接:https://vjudge.net/problem/HDU-3081 Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    ...

  6. hdu3081 Marriage Match II(最大流)

    转载请注明出处: http://www.cnblogs.com/fraud/           --by fraud Marriage Match II Time Limit: 2000/1000 ...

  7. 【HDU - 3081】Marriage Match II(网络流最大流,二分+网络流)

    题干: Presumably, you all have known the question of stable marriage match. A girl will choose a boy; ...

  8. HDU 3277 Marriage Match III(并查集+二分+最大流)

    题意:和HDU3081一样的题意,只不过多了一个条件,每个女孩除了能选自己喜欢的男生之外,还能选不超过K个自己不喜欢的男生,问游戏最多能进行几轮 思路:除了选喜欢的,还能选任意K个不喜欢的,怎么建图呢 ...

  9. hdu 1150 Machine Schedule (经典二分匹配)

    //A组n人 B组m人 //最多有多少人匹配 每人仅仅有匹配一次 # include<stdio.h> # include<string.h> # include<alg ...

最新文章

  1. 从零开始,手把手教会你5分钟用SPARK对PM2.5数据进行分析(包括环境准备和SPARK代码)...
  2. 手机1像素线粗_关于移动端开发 1px 线的一些理解和解决办法
  3. codeforces C. Design Tutorial: Make It Nondeterministic
  4. Mac安装软件报“打不开。。。,因为它来自身份不明的开发者”的解决办法
  5. php序列化和反序列化
  6. Java基础---数组内容详解
  7. python的workbook_python openpyxl 操作 excel
  8. 字符设备驱动之Led驱动学习记录
  9. 解决Linux Kettle出现闪退问题
  10. python requests示例_Python3中requests库学习01(常见请求示例)
  11. jquery概述_jQuery事件方法概述
  12. JVM笔记1:Java内存模型及内存溢出
  13. 大数据导论(2)——推动大数据发展主要的商业因素(业务架构、业务流程管理、通信技术、万物互联等)...
  14. Installshield2008教程
  15. vant ,vue 图片上传压缩
  16. vue.js环境+腾讯防水墙+实现弹窗滑动模块验证登录
  17. Hdu2184汉诺塔VIII
  18. Excel2Latex 实操步骤(1)
  19. Fresco高斯模糊使用
  20. 四、项目进度管理20题

热门文章

  1. 研大考研不是骗子:考研英语复习备考的方法
  2. 回忆小时候画的煞有介事的7部长篇少女漫画~纯属自娱自乐,荼毒高人双眼!...
  3. UE4的自定义输入设备插件制作方法
  4. 英雄联盟总结之客户端综述1(笔记分享)
  5. 亚特兰蒂斯的回声(中文版): chatGPT 的杰作
  6. Firefox OS——B2G for G1 Dream 编译及运行
  7. Pandas读取.csv文件
  8. muduo学习笔记:base部分之高性能日志库
  9. GNN等优缺点总结及解决方案
  10. html5 摄像头流数据,html5 – 如何将网络摄像头流式传输到服务器并操纵流