
二分图
largecub233
这个作者很懒,什么都没留下…
展开
-
二分图——洛谷P1155 双栈排序
https://daniu.luogu.org/problem/show?pid=1155 二分图染色+模拟 1.首先考虑一个简单情况——单栈排序,显然有这样的一个事实: a[i]和a[j] 不能压入同一个栈⇔存在一个k,使得i < j < k且a[k] < a[i] < a[j] 时间复杂度为O(n^3).对于n<=1000仍显吃力,对此可以用动态规划的思想,将上述复杂度降原创 2017-05-07 15:11:00 · 688 阅读 · 0 评论 -
二分图——洛谷P3386 【模板】二分图匹
https://www.luogu.org/problem/show?pid=3386 匈牙利算法不断寻找增广路; 尽可能让当前枚举的i可以匹配; 时间复杂度自己看代码;#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#define Ll long long原创 2017-05-22 11:45:58 · 362 阅读 · 0 评论 -
二分图总结
在图论中,匹配是指两两没有公共点的边集。 最大匹配即为包含边数尽量多的边集。 匈牙利算法主要流程是不断地寻找增广路进行增广。时间复杂度O(NM)。 当然,这个问题也可以用网络流来求解。假设两个点集分别为A和B,S向A连流量为1的边,A向B在原边集的基础上连流量为1的边,B向T连流量为1的边。跑S到T的最大流即为最大匹配边集中的边数。 由A连向B的边中,残量为0的边即为匹配边。原创 2017-05-22 15:13:12 · 288 阅读 · 0 评论 -
二分图——洛谷P2055 [ZJOI2009]假期的宿舍
https://www.luogu.org/problem/show?pid=2055 简单模型就是要睡觉的人连接可以睡觉的床; 然后大力匈牙利#include<bits/stdc++.h>using namespace std;const int N=55;bool g[N][N],ok[N],vi[N],ans=0;int link[N],a[N];int n,m,x;bool原创 2017-05-23 20:14:33 · 362 阅读 · 0 评论 -
二分图——洛谷P2756 飞行员配对方案问题
这道题用匈牙利算法直接水掉的; 毕竟匈牙利本来就是记录方案的; 但是你用网络流这个就不简单了; 另外匈牙利可以先模版题; 然后这一题好像没有No Solution!#include<bits/stdc++.h>using namespace std;const int N=105;struct cs{int to,nxt;}a[N*N*5];bool vi[N];int head[原创 2017-05-23 20:16:24 · 422 阅读 · 0 评论 -
二分图——洛谷P1640 [SCOI2010]连续攻击游戏
https://www.luogu.org/problem/show?pid=1640 数据范围让匈牙利有点怕,其实直接救过了; 当然了,我们可以用时间戳去代替vi数组; 我用了一个站去代替memset; 其实还是时间戳更好#include<bits/stdc++.h>using namespace std;const int N=1e6+5;struct cs{int to,nxt;原创 2017-05-23 20:19:40 · 532 阅读 · 0 评论 -
二分图——洛谷P2825 [HEOI2016]游戏
https://www.luogu.org/problem/show?pid=2825 这个显然就是以行列来二分图; 因为二分图的话每个点最多连接一条边相当于这一行里放一个炸弹; 建图 遇到#就分段 比如 * * xx # * 这一行就分成两段; **xxxx这一行直接就是一段; 然后大力二分; 我一开始写法;#include<bits/stdc++.h>using namespa原创 2017-05-23 20:26:02 · 261 阅读 · 0 评论 -
二分图——洛谷P1129 [ZJOI2007]矩阵游戏
https://www.luogu.org/problem/show?pid=1129 二分图的基本建模; 我们发现一个行一个列只要有一个点就好啦; 意味着我们每一行上的多个点其实最多只移动一颗; 所以直接大力二分图,a[i,j]有点i连接j; 表示i行可以有j列移过来;#include<bits/stdc++.h>using namespace std;const int N=205原创 2017-05-23 20:36:50 · 321 阅读 · 0 评论 -
二分图——vijos1204 CoVH之柯南开锁
https://vijos.org/p/1204 a[i][j]有直接i点连接j点; 求最大匹配; 为什么? 因为在这个图里,每一条变现代标一个点; 我们删掉一行一列,等同删去一个点即他相连的边; 所以我们求最小覆盖; 就是最大匹配嘛;#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#inc原创 2017-05-23 20:43:15 · 978 阅读 · 0 评论