随笔分类 -  图论

摘要:题意: 给定一个带费用的流量网络,要求最大费用(不要求最大流)。 思路: 最小费用最大流魔改,将插入边的费用取反,此时每次进行增广会选一条最短的路径对答案产生贡献,开始这个路径是负的,但是之后为了满足最大流,贡献可能变成正的,因此只要对cost不断取min,最后的mincost就是答案的相反数。 # 阅读全文
posted @ 2021-02-14 20:54 UCPRER 阅读(100) 评论(0) 推荐(0)
摘要:struct UFS { stack<pair<int*, int> > stk; int fa[maxn], rnk[maxn]; inline void init(int n) { for (int i = 0; i <= n; ++i) fa[i] = i, rnk[i] = 0; } inl 阅读全文
posted @ 2020-11-29 12:35 UCPRER 阅读(138) 评论(0) 推荐(0)
摘要:/* 询问每个节点子树上的颜色数 */ #include <bits/stdc++.h> using namespace std; const int maxn=1e5+5; struct edge{ int v,next; }E[maxn<<1]; int head[maxn],tot=0; vo 阅读全文
posted @ 2020-11-22 16:58 UCPRER 阅读(95) 评论(0) 推荐(0)
摘要:我们有时需要判断一些树是否同构。这时,选择恰当的Hash方式来将树映射成一个便于储存的Hash值(一般是 32 位或 64 位整数)是一个优秀的方案。 树Hash定义在有根树上。判断无根树同构的时候,可以比较重心为根的Hash值(一个树最多有两个根)或者比较每个点为根的Hash值(后者有O(n)的求 阅读全文
posted @ 2020-08-12 15:30 UCPRER 阅读(353) 评论(0) 推荐(0)
摘要:```cpp#include using namespace std;const int maxn = 5e3 + 5;const int maxm = 5e5 + 5;namespace MST { struct edge { int u, v, w; }E[maxm]; int n, m; int tot = 0; void addedge(int u, int v, int w) { E... 阅读全文
posted @ 2020-03-03 23:36 UCPRER 阅读(178) 评论(0) 推荐(0)
摘要://求LCA,k级祖先 #include <bits/stdc++.h> using namespace std; const int maxn = 5e5+5; const int maxm = 1e6+5; int lg[maxn]; struct edge { int next, v; }E[ 阅读全文
posted @ 2020-02-08 19:46 UCPRER 阅读(154) 评论(0) 推荐(0)
摘要:定义: 团:从一个无向图中找出一个点集,使得此集合中任意两个点都有一条直接相连的边。 极大团:不是任何其他团的子图的团 最大团:极大团中点数最多的团 定理: 一个图的最大独立集等于其补图的最大团 Born_Kerbosch算法 从后往前枚举每一个点为第一个点,选择的其他点为大于这个点的情况。用vec 阅读全文
posted @ 2019-12-08 16:03 UCPRER 阅读(1293) 评论(0) 推荐(0)
摘要:**定义:**一条能够不重不漏地经过图上的每一条边的路径称为欧拉路径 判定 首先图必须是联通的,用并查集判即可 无向图欧拉回路:所有点度数都为偶数 无向图欧拉路径:两个点(或0个点)度数为奇数,其余点(或所有点)度数为偶数 有向图欧拉回路:所有点入度=出度 有向图欧拉路径:一个点入度=出度+1,一个 阅读全文
posted @ 2019-12-08 14:38 UCPRER 阅读(2187) 评论(0) 推荐(0)
摘要:二分图最大匹配 匈牙利算法 增广路:在二分图中的一条路径,起始点和终末点都是未匹配点,边按照 未匹配边-匹配边-未匹配边-.....匹配边-未匹配边交替相连(显然其他点都是匹配点)。 匈牙利算法的核心就是不断在图中寻找增广路,找到了就将路上的匹配边变为未匹配边,未匹配边变为匹配边,这样当前的匹配就增 阅读全文
posted @ 2019-10-30 19:50 UCPRER 阅读(177) 评论(0) 推荐(0)
摘要:Tarjan算法 Tarjan算法是用于求图上的强连通分量(环)的算法。 应用: 有向图求强连通分量/缩点 无向图求割点 无向图找环 求强连通分量/缩点 强连通是有向图才有的概念。如果有向图G的每两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图,称为强连通分量。求有向图的强连通分量是Ta 阅读全文
posted @ 2019-09-25 19:09 UCPRER 阅读(1263) 评论(0) 推荐(0)
摘要:最短路 Floyd多源最短路 基本用法 for(int i=1;i<=p;i++) for(int j=1;j<=p;j++) dis[i][j]=INF; for(int k=1;k<=p;k++) for(int i=1;i<=p;i++) for(int j=1;j<=p;j++) dis[i 阅读全文
posted @ 2019-08-21 16:54 UCPRER 阅读(211) 评论(0) 推荐(0)
摘要:最小生成树 Prim 本质是维护一个集合,选择一个点作为初始点A先加入集合,遍历未加入集合的点,将它们到A的距离设为到集合的最短距离,选则其中的最小值,将该点再加入集合。每次有新的点加入集合后,都用该点更新其余未加入集合的点到集合的距离。(与dijkstra不同的是,prim每次选择到集合最近的点, 阅读全文
posted @ 2019-08-06 16:50 UCPRER 阅读(157) 评论(0) 推荐(0)
摘要:原理 选择子树最大的儿子, 将其归入当前点所在 的同一条重链,结束后树被分为一系列序号(dfs序)连续的重链,利用数据结构(线段树)来维护这些链的信息,最终可以实现树上的链操作(树链查询、树链修改)。 概念 重儿子:父亲节点的所有儿子中子树结点数目最多(size最大)的结点; 轻儿子:父亲节点中除了 阅读全文
posted @ 2019-07-31 12:56 UCPRER 阅读(274) 评论(0) 推荐(0)
摘要:最大流 **定义:**有m条管道,n个节点,1为水源(源点),n为终点(汇点),每条管道有水流量上限,问如何分配每条水管的流量才能使终点处接受到的水流量最大。 流:从源点开始,在汇点结束的路径,有大小(即流量)。 容量网络:初始输入的各边的容量。 流量网络:计算中已有的水流量,即对汇点做出贡献的流量 阅读全文
posted @ 2019-07-27 16:28 UCPRER 阅读(356) 评论(0) 推荐(0)