
图论
蔡珏
这个作者很懒,什么都没留下…
展开
-
最大流判定(星际转移问题)
一种方式是坐公交车,从一个站点到另一个站点,那么就可以根据每辆公交车的路线来建边,假设某一辆公交车最开始在第 0 个站点,然后依次开往第 2 个站点,再开往第 5 个站点,那么先从第 0 天的第 0 个站点向第 1 天的第 2个站点连一条边,再从第 1 天的第 2 个站点向第 3 天的第 5 个站点连一条边,容量都是这个公交车的人数上限,其他路线依次类推。可以发现可行解中每个人行走的方式都能对应到流网络中的某一条边,只需要根据该方式移动的人数来设置对应的边的流量,就能得到对应的可行流,反过来同理。原创 2022-11-15 15:24:04 · 367 阅读 · 1 评论 -
有汇源上下界最大流和最小流
代码】有汇源上下界最大流。原创 2022-08-11 10:07:48 · 104 阅读 · 0 评论 -
无源汇上下界可行流
代码】无源汇上下界可行流。原创 2022-08-10 20:53:26 · 138 阅读 · 0 评论 -
最大流圆桌问题(二分图多重匹配问题)
考虑建图,设置源点S为0,汇点T为n+m+1,源点向所有单位连其容量的边,每个单位向圆桌连1的边,每个圆桌向源点连圆桌的容量的边,可知符合网络流的容量限制和流量限制,其最大流就是合法方案之一。...原创 2022-08-10 15:15:11 · 153 阅读 · 0 评论 -
树链剖分模板
代码】树链剖分模板。原创 2022-08-07 18:52:14 · 149 阅读 · 0 评论 -
Hierholzer算法dfs找欧拉回路模板
代码】dfs找欧拉回路模板。原创 2022-08-02 19:45:57 · 297 阅读 · 0 评论 -
tarjan求强连通分量
原理看:1推导过程看:2模板原创 2022-07-05 17:30:34 · 140 阅读 · 0 评论 -
daimayuan 三进制循环(树形dp)
题目传送门这个题目比较简单,思路一下就出来了。维护两个dp,dp1和dp2:dp,dp1和dp2:dp,dp1和dp2:dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp1[i]:以点i为起点以及子树符合取模递增的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度dp2[i]:以点i为起点以及子树符合取模递减的最大长度答案就是:ans=max(ans,Σ(dp1原创 2022-05-21 14:07:52 · 137 阅读 · 0 评论 -
并查集。。
题目链接我的另外的解LCA倍增思想其实只要并查集维护成森林每个树都是单色的,同色有边就连在一个连通集里面,查询时,如果两个点在同一个树,而且树颜色符合查询的颜色,或者两个点不在同一个树上,必定是经过了查询的颜色的/********************************************************************* 程序名: 版权: Joecai 作者: Joecai 日期: 2022-05-04 21:00 说明:***原创 2022-05-04 21:46:44 · 202 阅读 · 0 评论 -
倍增LCA受到启发的一题
倍增过程中可以吧,这里的 fa数组可以推广一下,保存每个点往根方向的路径上各个边/点的性质。常见的维护值有路径长度(树上求最短路)以及点的特殊性质(比如本题中各个农场的奶牛种类)等。这里维护的数组dp[i,j,op](op=1或者op=0)dp[i,j,op] (op=1或者op=0)dp[i,j,op](op=1或者op=0)维护的是i点往树根方向走2j步经过没经过opi点往树根方向走2^j步经过没经过opi点往树根方向走2j步经过没经过op转移方程为:dp[i,j,op]∣=(dp[i,j−1,o原创 2022-05-04 20:17:19 · 182 阅读 · 0 评论 -
倍增在线求LCA
acwing祖孙询问倍增求最近公共祖先,实际上是对暴力的优化(向上标记法)我们来看看向上标记法的实现://预处理每个结点的深度,以及结点的父结点的编号void dfs(int u, int father){ depth[u]=depth[father]+1; fa[u]=father; for(int i=h[u];~i;i=ne[i]){ int v=e[i]; if(v!=father) dfs(v,u); }}//求u和v的原创 2022-05-04 11:39:28 · 162 阅读 · 0 评论 -
Tarjan算法求LCA(最近公共祖先)
acwing祖孙询问此题用倍增在线查询更好,我只是练练Tarjan算法的手,倍增时间复杂度为O(nlongn),查询O(logn),tarjan离线lca算法O(n+q)O(nlong_n),查询O(log_n),tarjan离线lca算法O(n+q)O(nlongn),查询O(logn),tarjan离线lca算法O(n+q)Tarjan算法原理:这个博客写的很好#include<bits/stdc++.h>using namespace std;const int N=4e4+原创 2022-05-03 20:34:42 · 650 阅读 · 0 评论 -
Poj 3169(差分约束系统)
题目传送门首先我们要知道最短路问题的本质是:111.从起点S出发到各个顶点v的最短距离是d[v]d[v]d[v]。2.对于每条权值为w的边e=(v,u),都有d[v]+w>=d[u]成立2.对于每条权值为w的边e=(v,u),都有d[v]+w>=d[u]成立2.对于每条权值为w的边e=(v,u),都有d[v]+w>=d[u]成立。3.3.3.当所有满足以上的所有不等式的d中,d[v]−d[s]d[v]-d[s]d[v]−d[s]的最大值就是从S到V的最短距离(注意是最大值才是最短距原创 2021-12-01 15:09:54 · 618 阅读 · 0 评论 -
Poj 3255(dijkstra求次短路)
题目传送门详情见《挑战程序设计竞赛》P109代码如下:#include <algorithm>#include <cstdio>#include <iostream>#include <queue>#define endl '\n'using namespace std;typedef long long ll;const int N = 5500, INF = 0x3f3f3f3f;typedef pair<int, int&g原创 2021-11-30 14:47:26 · 210 阅读 · 0 评论 -
没有给出二分图两个左右点集时的二分图最大匹配
当题目告诉你,这个图为二分图,而且左百部n1n1n1个点,右半部n2n2n2个点,下面m行,左半边点u与右半边点v相连:此时只需要一个有向图:#include<iostream>#include<algorithm>#include<cmath>#include<cstring>using namespace std;const int N = 10000, M = 2e5 + 10;typedef long long ll;int n1原创 2021-11-24 17:33:36 · 102 阅读 · 0 评论 -
飞行员配对方案(Dinic求最大二分图匹配(对匈牙利算法的优化),以及二分图的建图方式)
飞行员配对方案二分图最大流建图方式:1.源点S与每个外籍飞行员有向边连边,权值为12.每个英国本地飞行员与汇点连接有向边,权值为13根据题意,外籍与本地飞行员连接有向边,权值为1.输出方式:最后输出方案数:当某个可行流被选了之后经过的所有正向边都会−=t-=t−=t.最后中间外籍与本地飞行员连接关系的正向有向边如果为0,则此边为最小割集(已被选出)即最大流,割集对应的点,就是选的方案#include<bits/stdc++.h>using namespace std;co原创 2021-11-19 17:08:57 · 551 阅读 · 0 评论 -
太空飞行计划问题(最大流,经典最大权闭合子图问题)
扶苏大佬的解释(最大权闭合子图问题解法)我的代码#include<bits/stdc++.h>using namespace std;const int N=150,INF=0x3f3f3f3f;int h[N],f[N],ne[N],e[N],idx;int q[N], d[N], cur[N];//q是队列,d是分成,cur是优化];int n,m;int fl=0;int S,T;int ans;inline int read(){ int X = 0; boo原创 2021-11-19 14:05:42 · 127 阅读 · 0 评论 -
网络流理解与模板
对于最大流与最大流等于最小割的理解参考某大佬博客:EK求最大流模板:#include<iostream>#include<cstring>using namespace std;const int N=1010,M=20010;//h[i]存下以点i为起点的边的编号(按输入顺序,存下的是最后一条边的编号)//f[i]存下边i的权值,e[i]存下边i的终点,ne[i]存下和边i同起点的上一条边的编号(可以依次找出同起点的所有边)//idx用来记录边的编号//p,原创 2021-11-18 14:24:31 · 283 阅读 · 0 评论