二分图图匹配
来源:互联网 发布:unity3d将base64转图片 编辑:程序博客网 时间:2024/04/30 00:28
dog dog 明明是讲网络流我却突然get了二分图匹配
看来图论才是真爱。
去他的 增广路,不就是找两两匹配嘛。‘
准备给你们画个图的,但是!
好麻烦哦,算了自己懂就行了是伐。
假设123 ABC。
首先对第一个点进行dfs,如果 找到一条边链接,return true,假设1与A连接。
然后对第二个点进行dfs,如果他和原来已经使用过的点有边,如2与A也有边,那我们就先假设断掉1与A,再来找1与其他点有没有边,找到就连接,2与A连接,return true,若1没有找到,则不更改,return false。
。。。。
代码突然好懂,dog dog。
#include<iostream>#include<algorithm>#include<string>#include<queue>#include<cmath>#include<vector>#include<stdlib.h>#include<iomanip>#include<list>#include<stack>#include<memory.h>#include<ctype.h>using namespace std;typedef long long ll;const int MAXN = 510;int uN, vN;int g[MAXN][MAXN];int linker[MAXN];bool used[MAXN];bool dfs(int u){int v;for (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;int u;memset(linker, -1, sizeof(linker));for (u = 0; u<uN; u++){memset(used, 0, sizeof(used));if (dfs(u)) res++;}return res;}int main(){int m;int u, v;int iCase = 0;while (scanf("%d%d%d", &uN, &vN, &m) != EOF){iCase++;if (uN == 0 && vN == 0 && m == 0)break;for (int i = 0; i<uN; i++)for (int j = 0; j<vN; j++)g[i][j] = 1;while (m--){scanf("%d%d", &u, &v);u--;v--;g[u][v] = 0;}printf("Case %d: %d\n", iCase, uN + vN - hungary());}return 0;}
’
阅读全文
0 0
- 二分图图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配
- 正则二分图匹配
- 二分图匹配
- 二分图匹配总结
- 二分图最大匹配
- 二分图最大匹配 。
- hdu2119二分图匹配
- 二分图匹配
- 二分图匹配
- 二分图匹配算法
- poj3020-二分图匹配
- 二分图匹配
- 二分图最大匹配
- 二分图最大匹配
- 416. Partition Equal Subset Sum (dp)
- 经典指标:SAR算法和应用
- 数据库连接池的基本使用
- JDK环境变量配置
- python编程中的if __name__ == 'main': 的作用和原理
- 二分图图匹配
- 谷歌 Pixel 2 及 Pixel XL 2 参数曝光,预计最早9月面市
- #define 宏的一些使用
- 亚马逊Alexa语音平台已拥有超过15000项技能应用,稳居智能语音排行榜第一
- APIO抢掠计划(浅谈Tarjan——(4))
- 程序员平常加班严重,如何有效率的提升自己?
- luogu P2518 [HAOI2010]计数
- 嫁人当嫁程序员
- 百度总裁陆奇深夜回复:贴吧要被关掉,这完全违背事实