随笔分类 - 图论--------------------------
摘要:【题意】给定按编号顺序站成一排的牛,给定一些约束条件如两牛距离不小于或不大于某个值,求1和n的最大距离。无解输出-1,无穷解输出-2。 【算法】差分约束+最短路 【题解】图中有三个约束条件,依次分析: ①坐标顺序和编号顺序一致【一定一定要记得这个约束条件】 xi-xi-1>=0 i向-1连边0 ②两
阅读全文
摘要:【题意】给定无向连通图,要求添加最少的边使全图变成边双连通分量。 【算法】Tarjan缩点 【题解】首先边双缩点,得到一棵树(无向无环图)。 入度为1的点就是叶子,两个LCA为根的叶子间合并最高效,直接将两个叶子并入双连通分量后建新图。 若没有两个LCA为根的叶子则往下换根。 ans=(num+1)
阅读全文
摘要:【题意】给定无向图,现在可能有一些点已经被删除,只给出信息是c个点未被删除且不能到达结点1,求最少的删除点个数。 【算法】最小割 【题解】本题和1的区别是:1求的是最少的不能到达1的结点数,那么就把损坏点圈缩在不可达点的邻点。 本体求的是删除最少的点使c个点不可达,这样的要求就是典型的最小割。 每个
阅读全文
摘要:【题意】给定n头牛和m对大小关系,求最坏情况下至少还需要比较几对奶牛的大小(在未确定顺序的奶牛对中随机比较) 【算法】floyd求传递闭包 【题解】可达说明大小已知,则不可达点对数量就是最少比较次数。 使用bitset优化传递闭包,复杂度O(n^3 /32)。 #include<cstdio> #i
阅读全文
摘要:【题意】给定n*n网格,有k个物品,每次可以消灭一行或一列,求消灭掉所有物品的最少操作次数。 【算法】二分图最小覆盖 【题解】此题是最小覆盖模型的出处。 将物品的x-y连边建立二分图。 最小覆盖:选择最少的点,使每条边至少有一个端点被覆盖。 刚好对应题意。 最小覆盖可以用最小割解决,将选择点视为割去
阅读全文
摘要:【题意】给定有向图,边严格从大编号指向小编号,求前k短路。n<=1000,m<=10000,k<=100。 【算法】归并+拓扑排序||A*求第k短路 【题解】因为此题自带拓扑序的特殊性,可以用归并写。 f[i][j]表示从i出发的第j短路,将i出去的点的前k短路依次归并。 复杂度O(m*k)。 #i
阅读全文
摘要:【题意】给定m条边的无向图,起点s,终点t,要求找出s到t恰好经过n条边的最短路径。n<=10^6,m<=100。 【算法】floyd+矩阵快速幂 【题解】 先对点离散化,得到点数N。 对初始边建立初始矩阵,然后考虑每次多跑一条边相当于一次矩阵乘法,即c[i][j]=min(a[i][k],a[k]
阅读全文
摘要:【算法】图论,最短路? 【题意】原图为无向连通图,现给定原图的最短路矩阵,求原图最小边权和,n<=300。 【题解】要求最小边权和下,原图的所有边一定是所连两端点的最短路。 那么现在将所有最短路作为边加入原图,考虑删边。 对于(u,v),若存在点w使得(u,v)=(u,w)+(w,v),则(u,v)
阅读全文
摘要:【算法】最短路树+(树链剖分+线段树)||最短路树+并查集 【题解】 两种方法的思想是一样的,首先题目限制了最短路树唯一。 那么建出最短路树后,就是询问对于每个点断掉父边后重新找路径的最小值,其它路径只能是这个点和其子树节点通过非树边到达非子树节点。 这样考虑很难统计,换个角度考虑每条非树边的影响。
阅读全文
摘要:【算法】01分数规划-最优比率环 【题意】给定有向图,点有收益,边有代价,重复经过的话收益不叠加而代价叠加,求从任意点开始最后回归该点的(收益/代价)最大。 【题解】 和普通的分数规划不同,这里的方案选择必须是一个环。首先有一个重要的结论:答案一定是一个简单环。 (简单证明:假设当前复杂环为两个简单
阅读全文
摘要:【算法】最大流 【题解】 S连向食物连向牛连向牛‘连向饮料连向T。 经典的一个元素依赖于两个元素的建图方式。 #include<cstdio> #include<algorithm> #include<cstring> #include<queue> using namespace std; con
阅读全文
摘要:【算法】分层图最短路 【题解】 考虑k层一模一样的图,然后每个夹层都在每条边的位置新加从上一层跨越到下一层的边权为0的边,这样至多选择k条边置为0。 然后考虑方便的写法。 SPFA 第一次SPFA计算常规最短路(顶层)。 之后k次SPFA,松弛操作加上可以从上一层节点直接获取最短路(即相当于省一条边
阅读全文
摘要:第一题 题意:给定n*m网络,定义两个棋子在同行同列则相互攻击,同时要求两个棋子的行和列不能一小一大,求满足条件的最大摆放的方案数。 题解:ans=C(max(n,m),min(n,m)),就是在max中取min个数字的组合,组合内排序构成一种方案。 #include<cstdio> #includ
阅读全文
摘要:【算法】数论,二分图最大匹配 【题意】有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下。 【题解】 1.定义bi,当ai和ai-1的朝向相同时,bi=0,否则bi=1。特别的,a0朝向下。 则问题转化
阅读全文
摘要:【题意】求DAG上最多的点使得互不可达。 【算法】floyd+最大匹配 【题解】 链是DAG上的一个点集,集合内的点相互单向可达。 反链是DAG上的一个点集,集合内的点相互不可达。 题目显然是求最长反链,转化为最小链覆盖。 最小链覆盖只要求可达,最小路径覆盖却要求相连。 所以floyd传递闭包(用f
阅读全文
摘要:【第一题】 题意: 给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T。 这里的出现定义为存在一串下标 ,满足 且 。 2≤n≤5000,数据随机。 题解: 很容易想到部分分算法DFS枚举子集。 由于数据随机,n>10时大概率存在,直接输出。 #include<cstdio> #in
阅读全文
摘要:【算法】博弈论+二分图匹配(最大流) 【题解】方格图黑白染色得到二分图, 二分图博弈:当起点不属于某个最大匹配时,后手必胜。 问题转化为那些点不属于某个最大匹配。 先找到一个最大匹配,非匹配点加入答案。 假设一个匹配点要解放成为非匹配点,则与其匹配的点必须去匹配另一个点。如果另一个点也是匹配点,则其
阅读全文
摘要:【算法】期望DP+floyd 【题解】用floyd预处理最短距离。 注意重边与自环——图论双毒!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! QAQ 然后搞清楚方案和概率的问题,我们DP是要决策最优方案。 f[i][j][0~1]表示前i个,剩余j份申请资格,当前第i个是否
阅读全文
摘要:【算法】最小生成树 【题解】 想到网络流,但是好像不能处理流量和费用的关系。 想到最短路,但好像不能处理重复选边的问题。 每条边只需要选一次,每个点就要遍历到,可以想到最小生成树。 建超级源向每个点连边,点与点连边,对n+1个点求最小生成树(MST)即可。 #include<cstdio> #inc
阅读全文
摘要:【算法】有源汇上下界最小费用可行流 【题解】上下界 因为上下界相同,所以无所谓最小流了,可行流(初始流+附加流)就是答案了。 记得源点向新建节点连一条容量为m(人)的边。 bzoj 2055 80人环游世界
阅读全文