[Ural1099]工作安排 带花树
题目大意
一般图最大匹配.
题解:
求解一般图最大匹配.
直接使用带花树即可.
(带花树也是刚学)...
马上写带花树的ppt,会很通俗易懂.
(充分证明了本苣智商不够,写不出高深的课件)
如果有想要的依然可以直接私信我 QAQ
带花树模板
#include <cstdio>
#include <cstring>
#include <algorithm>
typedef long long ll;
inline void read(int &x){x=0;char ch;bool flag = false;while(ch=getchar(),ch<'!');if(ch == '-') ch=getchar(),flag = true;while(x=10*x+ch-'0',ch=getchar(),ch>'!');if(flag) x=-x;
}
#define rg register int
#define rep(i,a,b) for(rg i=(a);i<=(b);++i)
#define per(i,a,b) for(rg i=(a);i>=(b);--i)
const int maxn = 256;
int n;
bool map[maxn][maxn],inq[maxn],inBlo[maxn],mark[maxn];
int link[maxn],fa[maxn],belong[maxn],q[maxn],l,r;
inline void bloom(int x,int y){rep(i,0,n) mark[i] = inBlo[i] = false;
#define nx(x) fa[link[(x)]]int lca;for(rg i=x;i;i=nx(i)) mark[i = belong[i]] = true;for(rg i=y;i;i=nx(i)){i = belong[i];if(mark[i]){lca = i;break;}}for(rg i=x;belong[i] != lca;i=nx(i)){if(belong[nx(i)] != lca) fa[nx(i)] = link[i];inBlo[belong[i]] = inBlo[belong[link[i]]] = true;}for(rg i=y;belong[i] != lca;i=nx(i)){if(belong[nx(i)] != lca) fa[nx(i)] = link[i];inBlo[belong[i]] = inBlo[belong[link[i]]] = true;}
#undef nxif(belong[x] != lca) fa[x] = y;if(belong[y] != lca) fa[y] = x;rep(i,1,n) if(inBlo[belong[i]]){belong[i] = lca;if(!inq[i]) inq[q[++r] = i] = true;}
}
inline void modify(int s){int x,y,z = s;while(z){y = fa[z];x = link[y];link[y] = z;link[z] = y;z = x;}
}
inline void bfs(int s){rep(i,0,n){fa[i] = inq[i] = 0;belong[i] = i;}l = 0;r = -1;q[++r] = s;inq[s] = true;while(l <= r){int u = q[l++];rep(v,1,n){if(map[u][v] == 0 || belong[u] == belong[v] || link[u] == v) continue;if(s == v || link[v] && fa[link[v]]) bloom(u,v);else if(fa[v] == 0){fa[v] = u;if(link[v] != 0){q[++r] = link[v];inq[link[v]] = true;}else{modify(v);return ;}}}}return ;
}
int main(){read(n);int u,v;while(scanf("%d%d",&u,&v) != EOF){map[u][v] = map[v][u] = true;}rep(i,1,n) if(link[i] == 0) bfs(i);int ans = 0;rep(i,1,n) if(link[i] != 0) ++ ans;printf("%d\n",ans);rep(i,1,n){if(link[i] > i) printf("%d %d\n",i,link[i]);}return 0;
}
转载于:https://www.cnblogs.com/Skyminer/p/6815608.html
[Ural1099]工作安排 带花树相关推荐
- [转]带花树,Edmonds's matching algorithm,一般图最大匹配
看了两篇博客,觉得写得不错,便收藏之.. 首先是第一篇,转自某Final牛 带花树--其实这个算法很容易理解,但是实现起来非常奇葩(至少对我而言). 除了wiki和amber的程序我找到的资料看着都不 ...
- 综合布线工作组2008年上半年技术课题工作安排会议通知
中国工程建设标准化协会信息通信专业委员会 建标信通字[2008] 02号 综合布线工作组2008年上半年技术课题工作安排会议通知 各工作组成员 中国工程建设标准化协会信息通信专业委员会综合布线 ...
- 广角相机app哪个比较好用_推荐一款比较好用的工作安排备忘app?
工作效率高的上班族,做事有计划,自律能力强,可以很好地完成工作任务.当然了,选择一款好用的工作安排备忘app也是非常重要的. 王鹏在一家公司上班,是一个行动力很强的人.工作上的事情按时完成,还利用空闲 ...
- URAL - 1099 Work Scheduling(一般图最大匹配-带花树模板)
题目链接:点击查看 题目大意:给出n个警卫,接下来给出数个关系,表示两个警卫可以互相配合,现在规定只有可以互相配合的警卫才能留下来继续工作,问最多能有多少个警卫留下来工作,输出匹配方案 题目分析:一般 ...
- 一般图最大匹配——带花树
所谓花,就是如下图所示的一个奇环: 本文中粗边代表现在的匹配边,细边代表该点的前驱(后文会讲解前驱是什么,现在只需要知道每个点和它的前驱在原图中一定是有边的). 如图所示,一朵包含\(2k+1\)个点 ...
- 关于技术管理者应该如何做好工作安排的一点思考
技术管理者的主要工作是带人.做事.看方向.带人是指团队人员能力的培养.团队梯队的建设等等:做事是指完成各项业务需求:看方向是指明确团队未来的发展方向和目标. 我们经常会辩论"做管理了还要不要 ...
- 济南电子机械工程学校计算机专业班主任,济南电子机械工程学校2019级新生报到、军训工作安排通知...
济南电子机械工程学校2019级新生报到.军训工作安排通知 各位家长朋友.2019级新同学: 为妥善做好2019级新生报到及军训工作,现将学校2019级新生报到.军训工作具体安排如下,请您知悉并遵照执行 ...
- [BZOJ1572][Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1351 Solved: 632 [Sub ...
- 麦肯锡顾问深度工作安排:将工作可视化
工作表安排的三个步骤 凡是善于工作的人,都有一个共通的方法,那就是他们能够有意识或者无意识地使自己的整体工作可视化. 商业系统型的工作安排法: 流程:为了创造价值明确工作的整体流程 分解:将整体流程分 ...
- luogu P4258 [WC2016]挑战NPC(一般图的最大匹配,带花树,建图、拆点技巧)
整理的算法模板合集: ACM模板 luogu P4258 [WC2016]挑战NPC 如果是一堆球一堆筐,每一个筐里只能放一个球,求最大能放多少个球, 那么就是一个二分图的最大匹配问题,非常简单,我们 ...
最新文章
- mongoTemplate 条件查询
- AndroidCamera开发学习笔记01
- android js变量定义数组长度,js 声明数组和向数组中添加对象变量的简单实例
- 文巾解题 27. 移除元素
- Android中使用SeekBar拖动条实现改变图片透明度
- css hack技术整理
- 用java编写的一个迪杰斯特拉算法(单源最短路径算法,Dijkstra算法)。
- 3.2 选择最可能的句子
- 信号量sem 的用法
- Bootstrap 多媒体对象(Media Object)
- 肌电|表面肌电应用的新进展
- OpenEuler编译、安装与挂载f2fs文件系统
- Android 端天气预报APP的实现(二)阿里云天气预报API的获取
- 网络操作系统之VyOS部署
- 使用python抓取落网期刊图片
- 用css实现扑克牌,图片的翻转效果
- MySQL中实现rank排名查询以及在Mybatis中使用 mysql 的自定义变量 @的问题解决
- iFix专题——零基础学习iFix
- NE555构成多谐振荡器及三角波、正弦波的生成(附工程文件)
- 神州笔记本战神风扇声音大怎么解决
热门文章
- 深度学习系列(二)【人类语言处理--语音辨识】
- 如何准备数学建模?(附建模必备资料)
- 求解偏微分方程开源有限元软件deal.II学习--Step 13
- 六千字干货文:到底要怎么去学算法?
- [转]VC编辑中的一些方法
- 2019招行信用卡中心春招笔试题
- sublime 执行print带有中文时出错Decode error - output not utf-8
- 腾讯校招技术岗面试经历及总结(已发offer)
- 【转】【翻】Android Design Support Library 的 代码实验——几行代码,让你的 APP 变得花俏...
- python爬虫常用第三方库