博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hihocoder 1122 二分图最大匹配之匈牙利算法
阅读量:6131 次
发布时间:2019-06-21

本文共 1331 字,大约阅读时间需要 4 分钟。

  题目链接: , 匈牙利算法裸题。

  刚刚学的二分匹配,还是要多刷题。

 


 

  这道题可以直接套模板,我是根据题目上面的来做的,所以就先加了个染色优化,效果一般吧。

 

#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define LL __int64#define eps 1e-8#define INF 1e8#define lson l , m , rt << 1#define rson m + 1 , r , rt << 1 | 1const int MOD = 2333333; const int maxn = 1000 + 5;vector
e[maxn];int color[maxn] , match[maxn] , vis[maxn];void DFS(int s) { for(int i = 0 ; i < e[s].size() ; i++) { int j = e[s][i]; if(!color[j]) { color[j] = 3 - color[s]; DFS(j); } }}bool find(int v){ if(vis[v]) return false; vis[v] = 1; for(int i = 0 ; i < e[v].size() ; i++) { int u = e[v][i]; if(!vis[u]) { vis[u] = 1; if(!match[u] || find(match[u])) { match[u] = v; return true; } } } return false;}int main(){ int n , m , u , v , res = 0; scanf("%d %d" , &n , &m); memset(color , 0 , sizeof(color)); memset(match , 0 , sizeof(match)); while(m--) { scanf("%d %d" , &u , &v); e[u].push_back(v); e[v].push_back(u); } for(int i = 1 ; i <= n ; i++) { if(!color[i]) { color[i] = 1; DFS(i); } } for(int i = 1 ; i <= n ; i++) { if(color[i] == 1) { memset(vis , 0 , sizeof(vis)); res += find(i); } } printf("%d\n" , res);}

 

转载于:https://www.cnblogs.com/H-Vking/p/4322309.html

你可能感兴趣的文章
配置设置[Django]引入模版之后报错Requested setting TEMPLATE_DEBUG, but settings are not configured....
查看>>
下一步工作分配
查看>>
Response. AppendHeader使用大全及文件下载.net函数使用注意点(转载)
查看>>
Wait Functions
查看>>
代码描述10313 - Pay the Price
查看>>
jQuery最佳实践
查看>>
centos64i386下apache 403没有权限访问。
查看>>
vb sendmessage 详解1
查看>>
jquery用法大全
查看>>
Groonga 3.0.8 发布,全文搜索引擎
查看>>
PC-BSD 9.2 发布,基于 FreeBSD 9.2
查看>>
网卡驱动程序之框架(一)
查看>>
css斜线
查看>>
Windows phone 8 学习笔记(3) 通信
查看>>
重新想象 Windows 8 Store Apps (18) - 绘图: Shape, Path, Stroke, Brush
查看>>
Revit API找到风管穿过的墙(当前文档和链接文档)
查看>>
Scroll Depth – 衡量页面滚动的 Google 分析插件
查看>>
Windows 8.1 应用再出发 - 视图状态的更新
查看>>
自己制作交叉编译工具链
查看>>
Qt Style Sheet实践(四):行文本编辑框QLineEdit及自动补全
查看>>