[HDU5727]Necklace(二分图最大匹配,枚举)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5727
题意:有N个阴珠子和N个阳珠子,特定序号的阴阳珠子放在一起会让阳珠子暗淡。现在问排放成一个环,如何排放能让暗淡的阳珠子尽可能地少。
既要考虑阳珠子的位置也要考虑阴珠子的位置,可以先枚举阴珠子成环的全排列,由于成环所以N个珠子只需要枚举N-1个数的全排列。每一次固定阴珠子的一个排列,这时候阳珠子和阴珠子的位置确定了。下面看看有多少对阴阳珠子的结合会使相邻的阳珠子暗淡,二分图跑出暗淡的阳珠子数,用n减去最大匹配就是不暗淡的。
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 15; 5 int nu, nv; 6 int G[maxn][maxn]; 7 int linker[maxn]; 8 bool vis[maxn]; 9 10 bool dfs(int u) { 11 for(int v = 1; v <= nv; v++) { 12 if(G[u][v] && !vis[v]) { 13 vis[v] = 1; 14 if(linker[v] == -1 || dfs(linker[v])) { 15 linker[v] = u; 16 return 1; 17 } 18 } 19 } 20 return 0; 21 } 22 23 int hungary() { 24 int ret = 0; 25 memset(linker, -1, sizeof(linker)); 26 for(int u = 1; u <= nu; u++) { 27 memset(vis, 0, sizeof(vis)); 28 if(dfs(u)) ret++; 29 } 30 return ret; 31 } 32 33 int n, m; 34 int a[maxn]; 35 bool sb[maxn][maxn]; 36 37 int main() { 38 // freopen("in", "r", stdin); 39 int x, y; 40 while(~scanf("%d%d",&n,&m)) { 41 nu = nv = n; 42 memset(sb, 0, sizeof(sb)); 43 for(int i = 1; i <= n; i++) a[i] = i; 44 a[n+1] = 1; 45 for(int i = 0; i < m; i++) { 46 scanf("%d %d", &x, &y); 47 sb[x][y] = 1; 48 } 49 if(n == 0) { 50 printf("0\n"); 51 continue; 52 } 53 int ret = maxn; 54 do { 55 memset(G, 0, sizeof(G)); 56 for(int i = 1; i <= n; i++) { 57 for(int j = 1; j <= n; j++) { 58 if(!sb[i][a[j]] && !sb[i][a[j+1]]) { 59 G[i][j] = 1; 60 } 61 } 62 } 63 ret = min(ret, n-hungary()); 64 }while(next_permutation(a+2, a+n+1)); 65 printf("%d\n", ret); 66 } 67 return 0; 68 }
转载于:https://www.cnblogs.com/kirai/p/5969298.html
[HDU5727]Necklace(二分图最大匹配,枚举)相关推荐
- 【模板】匈牙利算法 二分图最大匹配题模板
[任务] 给定一个二分图,用匈牙利算法求这个二分图的最大匹配数. [说明] 求最大匹配,那么我们希望每一个在左边的点都尽量找到右边的一个点和它匹配. 我们一次枚举左边的点x的所有出边指向的点y, 若y ...
- HDU - 1528 Card Game Cheater(二分图最大匹配)
题目链接:点击查看 题目大意:题意有点像求田忌赛马的最优解,大概意思就是现在有两个人,每个人都有n张不同的扑克牌,扑克牌的大小首先以点数来确定,点数相同的情况下以花色来决定,红桃(Heart)> ...
- CodeForces - 387D George and Interesting Graph(二分图最大匹配+暴力)
题目链接:点击查看 题目大意:给出n个点和m条边组成的有向图,现在我们需要找出一个点作为中心点,然后增加或减少边的条数以达到下面的目标: 除了中心点外,其他的每个点的入度为2且出度为2 中心点和每个点 ...
- HDU - 5090 Game with Pearls(二分图最大匹配)
题目链接:点击查看 题目大意:杰瑞和汤姆在玩游戏,游戏规则是:汤姆会拿来N个容器,每个容器内一开始就会包含1~N个小球,现在轮到杰瑞操作了,杰瑞可以选择往每个容器里加入0个或者任意k的倍数个小球,问杰 ...
- HDU - 2063 过山车(二分图最大匹配)
题目链接:点击查看 题目大意:中文题目,不多赘述 题目分析:二分图最大匹配问题,匈牙利经典算法模板题,感觉这个博客写的很好,插个眼: https://article.itxueyuan.com/Aea ...
- 二分图判断以及二分图最大匹配
概念 二分图又称作二部图 ,是图论中的一种特殊模型. 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的 ...
- 二分图最大匹配与其应用
部分定义 传递闭包 一个图.如果图 G G G中点i" role="presentation">iii到点 j j j存在通路,那么在传递闭包中有边i−>j& ...
- 【网络流】【二分图最大匹配】Buaacoding1043 难题·Beihang Couple Pairing Comunity 2017
难题·Beihang Couple Pairing Comunity 2017 时间限制: 2000 ms 内存限制: 131072 kb 总通过人数: 10 总提交人数: 15 题目描述 BCPC( ...
- Luogu 1402 酒店之王(二分图最大匹配)
Luogu 1402 酒店之王(二分图最大匹配) Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自 ...
- 图论总结(一)二分图最大匹配
二分图最大匹配 (一).二分图 1.定义 2.性质 3.判定 (二).二分图的匹配 1.二分图的最大匹配 2. König定理及其证明 3.最小边覆盖与最大独立集 (三).增广路径 1.定义 2.性质 ...
最新文章
- 支付宝何以支撑双十一4200万次/秒的数据库请求峰值?
- 【深度学习的数学】为什么用二次代价函数,误差越大,参数调整幅度越小?
- 平面最接近点对问题(分治)
- 01-NVIDIA Jetson TX2开箱上电显示界面
- Liunx 重新mount
- HALCON:lines_gauss用法解析
- 理解ThreadLocal(一)
- 实验1 matlab图像处理初步,1.实验一 MatLab数字图像处理初步
- 怎么把程序内部坐标转为屏幕坐标_各位老大,如何把屏幕坐标转换成游戏的坐标...
- 【行业看点】量子时代的技术机遇
- java 事件冷却,基于“牛顿冷却定律”的机器学习算法
- neighbors.kneighbors_graph的原理和应用
- 抖音怎么加微信好友?抖音跳转微信的方法
- 如何用PHP判断一个网址是否被百度搜索引擎收录,判断的原理是什么?
- HMI-51-【多媒体】搞地图 1
- 剪辑视频怎么加音效 视频音效常用都有哪些类型
- “熊猫烧香”病毒简介及特征
- 漫画版python_不能错过的Python漫画
- google账号解除游戏绑定_如何把已经玩过的游戏绑定谷歌账号,要在谷歌play内操作的话...
- MATLAB仿真斜坡信号的校正,控制系统仿真matlab第六章习题答案.doc