正题

题目链接:https://www.luogu.com.cn/problem/P6113


题目大意

给出一张无向图,求最大匹配。

1≤n≤103,1≤m≤5×1041\leq n\leq 10^3,1\leq m\leq 5\times 10^41≤n≤103,1≤m≤5×104


解题思路

带花树的模板,我也不会讲/kel

所以看下面两篇大佬的博客吧
yyb-带花树算法学习笔记
Bill Yang-带花树学习笔记

时间复杂度好像是O(n3)O(n^3)O(n3)的


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1010,M=3e5+10;
struct node{int to,next;
}a[M];
int n,m,tot,tk,ans,ls[N],dfn[N];
int fa[N],pre[N],tag[N],match[N];
queue<int> q;
void addl(int x,int y){a[++tot].to=y;a[tot].next=ls[x];ls[x]=tot;return;
}
int find(int x)
{return (fa[x]==x)?x:(fa[x]=find(fa[x]));}
int LCA(int x,int y){++tk;x=find(x);y=find(y);while(dfn[x]!=tk){dfn[x]=tk;x=find(pre[match[x]]);if(y)swap(x,y);}return x;
}
void Blossom(int x,int y,int lca){while(find(x)!=lca){pre[x]=y;y=match[x];if(tag[y]==2){tag[y]=1;q.push(y);}fa[x]=fa[y]=lca;x=pre[y];}return;
}
int Aug(int s){memset(tag,0,sizeof(tag));memset(pre,0,sizeof(pre));for(int i=1;i<=n;i++)fa[i]=i;while(!q.empty())q.pop();q.push(s);tag[s]=1;while(!q.empty()){int x=q.front();q.pop();for(int i=ls[x];i;i=a[i].next){int y=a[i].to;if(!tag[y]){tag[y]=2;pre[y]=x;if(!match[y]){for(int u=y,lst;u;u=lst)lst=match[pre[u]],match[u]=pre[u],match[pre[u]]=u;return 1;}tag[match[y]]=1;q.push(match[y]);}else if(tag[y]==1&&find(y)!=find(x)){int lca=LCA(x,y);Blossom(x,y,lca);Blossom(y,x,lca);}}}return 0;
}
int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){int x,y;scanf("%d%d",&x,&y);addl(x,y);addl(y,x);}for(int i=1;i<=n;i++)if(!match[i])ans+=Aug(i);printf("%d\n",ans);for(int i=1;i<=n;i++)printf("%d ",match[i]);return 0;
}

P6113-[模板]一般图最大匹配【带花树】相关推荐

  1. URAL - 1099 Work Scheduling(一般图最大匹配-带花树模板)

    题目链接:点击查看 题目大意:给出n个警卫,接下来给出数个关系,表示两个警卫可以互相配合,现在规定只有可以互相配合的警卫才能留下来继续工作,问最多能有多少个警卫留下来工作,输出匹配方案 题目分析:一般 ...

  2. 【学习小记】一般图最大匹配——带花树算法

    Text 一般图的最大匹配仍然是基于寻找增广路的 增广路的定义是这样的一条路径,它不经过重复的点,并且路径两端均没有匹配,且整条路径是非匹配边-匹配边-非匹配边这样交错的. 类比二分图最大匹配的增广路 ...

  3. 一般图最大匹配——带花树

    所谓花,就是如下图所示的一个奇环: 本文中粗边代表现在的匹配边,细边代表该点的前驱(后文会讲解前驱是什么,现在只需要知道每个点和它的前驱在原图中一定是有边的). 如图所示,一朵包含\(2k+1\)个点 ...

  4. 2020牛客多校第1场I-1 or 2一般图最大匹配带花树

    链接:https://ac.nowcoder.com/acm/contest/5666/I Bobo has a graph with n vertices and m edges where the ...

  5. uoj79 一般图最大匹配 带花树学习(被虐

    辣鸡蒟蒻原来的blog: http://www.elijahqi.win/2018/01/28/uoj79/ 学习资料其一:http://www.csie.ntnu.edu.tw/~u91029/Ma ...

  6. 模板 - 一般图最大匹配(带花树)

    整理的算法模板合集: ACM模板 目录 题目描述 给出一张 n 个点 m 条边的无向图,求该图的最大匹配. 总结一下带花树算法的流程 1.每次找一个未匹配的点出来增广 2.在增广过程中,如果相邻点是白 ...

  7. Boke and Tsukkomi——一般图匹配+带花树算法

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=4687 A new season of Touhou M-1 Grand Prix is approach ...

  8. HDU - 4687 Boke and Tsukkomi(一般图最大匹配-带花图)

    题目链接:点击查看 题目大意:给出n个人和m对匹配,现在问有多少组匹配是不必要的,按照升序输出答案 题目分析:因为题目给的N比较小,所以一开始我的想法是先计算出最大匹配,而后枚举每一条边被删除,然后计 ...

  9. Joining Byte Blocks(哈希+带花树)

    题目链接 Problem Statement As you are probably aware, the Internet protocols specify a canonical byte or ...

  10. luogu P6113 【模板】一般图最大匹配(带花树)

    整理的算法模板合集: ACM模板 总结一下带花树算法的流程 1.每次找一个未匹配的点出来增广 2.在增广过程中,如果相邻点是白点,或者是同一朵花中的节点,则直接跳过这个点 3.如果相邻点是一个未被匹配 ...

最新文章

  1. Kali Linux常用服务配置教程获取IP地址
  2. Javascript 面向对象编程初探(一)--- 封装
  3. Robotium todolist.test.testcases.logout
  4. Jmeter(7)调试工具---HTTP Mirror Server
  5. Android开发之在任意Activity在广点通页面添加自定义布局在穿山甲页面添加任意布局
  6. 画图调子图间距_好看好用的桥梁工程图,你值得拥有!
  7. Android Studio之提示Unable to delete directory ‘*****\MyApplication\app\build‘
  8. BLE4.0教程四 新增特征值(CC2541)
  9. mysql5.5 免编译安装及脚本启动报错深入
  10. xmlhttp资料(收集)
  11. 3.8 51单片机-M74HC138译码器驱动8位数码管
  12. 《激荡三十年》十九、脚下的路——对中国经济未来的猜想
  13. java的一些学习网址。。。。。
  14. 5年内在豫投资超30亿元 重点助力河南智慧城市运营
  15. 服务器支持安装显卡吗,如何在2U服务器里装显卡
  16. ChatGPT所有插件详细教程
  17. linux主板上的网卡不显示,linux服务器更换主板后无法识别网卡解决办法
  18. Dev-C++5.11实现愤怒的小鸟
  19. 设计模式之结构型模型
  20. 下载安装指定版本的pandas

热门文章

  1. 生产者消费者_【线程通信】生产者消费者模型
  2. python版本差异_python的版本的差别 2,3
  3. linux cpu softirq,linux softirq机制
  4. java .this的用法_JAVA中this用法小结
  5. java 运行环境注册表_Java运行环境与Windows注册表
  6. 俄语使用计算机怎么说,计算机俄语常用词汇
  7. tensorrt轻松部署高性能dnn推理_部署环境之:tensorRT的插件
  8. html怎么防止表单重复提交,js防止表单重复提交的解决方法
  9. linux配置文件引用时间,linux时间设置、screen使用、命令分类、hash作用、命令引用及history命令...
  10. 达梦数据查询编码_查询数据库的编码方式