![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
-------Gragh Theory--------
文章平均质量分 67
图论
aWty_
在 AFO 的边缘徘徊的 OIer
展开
-
再写一遍的网络流
G=(V,E)∀(x,y)∈Ec(x,y)(x,y)∈/Ec(x,y)=0SS∈VTT∈Vf(x,y)(x∈V,y∈V)f(x,y)≤f(x,y)=∀x=S,x=T,(u,x)∈E∑f(u,x)=c(x,y)−f(y,x)(x,v)∈E∑f(x,v)容量限制。原创 2022-09-02 11:28:42 · 178 阅读 · 0 评论 -
CSP-S2019 Day2
给定一个 n×mn \times mn×m 的矩阵,矩阵上坐标为 (i,j)(i, j)(i,j) 的位置有 $$a_{i, j} 个数,矩阵中每一行最多选 111 个数,每一列选的数不能超过总选取数 kkk 的一半,且在矩阵中至少选一个数,问选取的方案数。 我们看看这三个约束条件,首先,至少选一个数和每行最多选一个的条件是很好满足的。难点就在于每列不能超过一半这个条件。 所以我们考虑简单容斥一下,我们求出全集再减去超过一半的数量,这样就得到了不超过一半的数量。 为什么要这样做呢,因为我们简单的分原创 2022-08-01 10:42:53 · 174 阅读 · 0 评论 -
[Vani有约会]雨天的尾巴
树上差分+线段树合并原创 2022-07-25 15:50:10 · 164 阅读 · 0 评论 -
天天爱跑步【NOIP2016 T4】
天天爱跑步原创 2022-07-21 11:29:11 · 251 阅读 · 0 评论 -
关于 Tarjan 算法的一些理解
关于 tarjan 的口胡笔记原创 2022-06-10 19:48:29 · 171 阅读 · 0 评论 -
笔记-圆方树
圆方树原创 2022-06-03 14:03:07 · 306 阅读 · 0 评论 -
[NOIP2015 提高组] 运输计划
运输计划题目大意 给定一棵树和 mmm 条路径,现在可以让你把某一条边的权值改为 000,使得这些路径长度的最大值最小。算法分析20 pts 20pts20pts20pts 非常简单啊,就是那几个 m=1m = 1m=1 的点,直接 lcalcalca 处理出这条路径的长度,然后删去最大边就好了。100 pts 考虑二分答案,现在的问题就是如何实现 check(x)check(x)check(x)。 考虑找到一条边,使得路径长度大于 xxx 的所有路径都有这条边,并且减去这条边的边权原创 2022-05-28 16:22:46 · 226 阅读 · 0 评论 -
树上差分啊
树上差分大概的介绍 树上的差分和普通的区间差分其实差不多,都是解决离线多次修改最后一次查询的问题的(不要告诉我你不会数组差分qwq)。 前置芝士:倍增求 LCALCALCA、正常的差分点的差分 比如这样一个问题,每次修改对于树上的一条路径,这条路径上的所有点的点权加 kkk,最后查询求某个点的点权。 考虑模仿普通数组的差分做法,对于树上的节点维护差分数组 ccc,我们考虑将一条路径(起点和终点分别为 s,ts, ts,t)上的所有点的权值加 kkk,那么差分数组应该这样变化:c[s]+原创 2022-05-28 11:12:09 · 155 阅读 · 0 评论 -
树的直径(补充:另一种 DP)
树的直径 设 dxd_xdx 表示以 xxx 为根节点到这棵树中最远的距离,显然有:dx=maxex to yi∈Ex{dyi+value(e)} d_x = \max_{e_{x \; to \; y_i} \in E_x} \{ d_{y_i} + value(e) \} dx=extoyi∈Exmax{dyi+value(e)} 设 fxf_xfx 表示经过 xxx 的最长链的长度,我们可以发现他就可以拆成四个部分:x to yix \; to \; y_ix原创 2022-05-28 08:47:26 · 103 阅读 · 0 评论 -
差分约束算法
差分约束算法 模板传送门: luogu5960 差分约束题目描述 给出一组包含 mmm 个不等式,nnn 个未知数的形如:{xc1−xc1′≤y1xc2−xc2′≤y2xc3−xc3′≤y3⋮xcm−xcm′≤ym\begin{cases}x_{c_1} - x_{c_1}' \leq y_1 \\x_{c_2} - x_{c_2}' \leq y_2 \\x_{c_3} - x_{c_3}' \leq y_3 \\\vdots \\x_{c_m} - x_{c_m}' \leq y原创 2022-05-13 19:47:10 · 139 阅读 · 0 评论 -
严格次小生成树
严格次小生成树 板子题传送门:luogu P4180定义 严格次小生成树就是说我们设最小生成树选择的边集是 EME_MEM,严格次小生成树选择的边集是 ESE_SES,那么需要满足(value(e)value(e)value(e) 表示这个边的边权):∑e∈EMvalue(e)<∑e∈ESvalue(e) \sum_{e \in E_M}value(e) < \sum_{e \in E_S}value(e) e∈EM∑value(e)<e∈ES∑value(e)分原创 2022-03-19 15:53:36 · 652 阅读 · 3 评论 -
Kruskal 重构树
Kruskal 重构树原创 2022-03-13 11:39:03 · 1703 阅读 · 0 评论 -
学习笔记--关于网络流
网络流一些定义网络 一个网络 G=(V,E)G = (V,E)G=(V,E) 是一张有向图,图中每条有向边 (x,y)∈E(x, y) \in E(x,y)∈E 都有一个给定的权值 c(x,y)c(x,y)c(x,y) 表示这条边的容量。图中有两个特殊的点 SSS 和 TTT ,分别称为 源点 和 汇点。 定义一个网络的流函数,它是一个定义在二元组上上的实数函数,他满足以下一些性质:f(x,y)≤c(x,y)容量限制f(x,y)=−f(y,x)斜对称∀x≠s,x≠t,∑(u,x)∈Ef(u,x原创 2021-11-01 10:50:41 · 125 阅读 · 0 评论 -
Tarjan与无向图的连通性
Tarjan与无向图的连通性一、割点与割边 定义:给定无向图 G = (V,E):如果对于 x∈Vx\in Vx∈V,从图中删去这一个节点 x 以及所有与它关联的边之后,G 被分成了两个互不相连的子图。则称 x 为图 G 的割点。 对于 e∈Ee\in Ee∈E,从图中删去这一个边 e之后后,G 被分成了两个互不相连的子图。则称 e 为图 G 的割边(也称为桥)。二、Tarjan 求割点与割边 我们在这里:Tarjan求强连通分量 已经说明过关于时间戳(dfn)和追溯值(low)的相关定义原创 2021-10-17 15:38:34 · 232 阅读 · 0 评论 -
Tarjan求强连通分量
Tarjan 求强连通分量#include<bits/stdc++.h>using namespace std;#define MAXN 100100#define MAXM 2 * MAXNint tot = 0;int first[MAXN] = { 0 };int dfn[MAXN] = { 0 };int low[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };void add原创 2021-10-13 23:03:18 · 93 阅读 · 0 评论 -
拓扑排序.
拓扑排序#include<bits/stdc++.h>using namespace std;#define MAXN 100100#define MAXM 2 * MAXNint n = 0;int m = 0;int cnt = 0;int a[MAXN] = { 0 };int tot = 0;int first[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };int deg[M原创 2021-10-13 23:01:30 · 59 阅读 · 0 评论 -
SPFA.
SPFA#include<bits/stdc++.h>using namespace std;#define MAXN 10010#define MAXM MAXN * (MAXN-1)int n = 0, m = 0, s = 0;int tot = 0;int first[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };int value[MAXM] = { 0 };void add(i原创 2021-10-13 22:59:52 · 60 阅读 · 0 评论 -
倍增求LCA
倍增求 LCA#include<bits/stdc++.h>using namespace std;#define SIZE #define MAXN 100100#define MAXM 2 * MAXNint n = 0; int m = 0;int tot = 0;int first[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };void add(int x, int y){ nx原创 2021-10-13 22:58:57 · 89 阅读 · 0 评论 -
Floyd
Floyd#include<bits/stdc++.h>using namespace std;#define MAXN 1010/* 图中最短路 f[i][j] = gragh[i][j] = min{f[i][k] + f[k][j], f[i][j]}*/int n = 0;int gragh[MAXN][MAXN] = { 0 };int f[MAXN][MAXN] = { 0 };void floyd(){原创 2021-10-13 22:56:21 · 71 阅读 · 0 评论 -
kruskal
kruskal#include<bits/stdc++.h>using namespace std;#define MAXN 10010#define MAXM MAXN * (MAXN - 1)/* 最小生成树 */int n = 0, m = 0;struct Tedge{ int x; int y; int value;}edge[MAXM];bool comp(Tedge a, Tedge b){ return a.value < b.value;原创 2021-10-13 22:54:48 · 137 阅读 · 0 评论 -
Dijkstra+堆优化
dijkstra + 堆优化#include<bits/stdc++.h>using namespace std;#define MAXN 100100#define MAXM 2 * MAXNint n = 0; int m = 0;int tot = 0;int first[MAXN] = { 0 };int nxt[MAXM] = { 0 };int to[MAXM] = { 0 };int value[MAXM] = { 0 };void add(原创 2021-10-13 22:51:29 · 78 阅读 · 0 评论 -
关于树的重心
一、定义对于树上的每一个点,计算其所有子树中最大的子树节点数,这个值最小的点就是这棵树的重心。(这里以及下文中的“子树”都是指无根树的子树,即包括“向上”的那棵子树,并且不包括整棵树自身。) 以上内容摘自树的重心 - OI Wiki 我们要求得一棵树的重心,我们就需要一个 size[MAXN] 数组。而这个数组的值需要从叶子结点往上来进行统计。对于叶子结点,我们知道 "以它为根的子树的大小是1" ,而对于非叶子节点 x 来说...原创 2021-10-11 20:25:15 · 196 阅读 · 0 评论 -
浅谈树的直径
一、定义:我们将一棵树T=(V,E)的直径定义为max(u,v) (u,v∈V),也就是说,树中所有最短路径距离的最大值即为树的直径。(就是树中的最长路径的长度)二、求解树德直径: 求得树的直径有两种方法,一种是两边 bfs (或者两边dfs)就能搞定的算法。还有一种就是树形DP。我们先来了解第一种,就是两遍dfs(或bfs)的算法。 引理:对于树上任意一点 P,找到离它最远的节点 Q。在找到离节点 Q 最远的节点 W。路径WQ的长度就是树的直径。...原创 2021-10-11 19:32:25 · 740 阅读 · 1 评论 -
关于二分图
二分图的定义(来自百度):二分图又称作二部图,是图论中的一种特殊模型。 设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图。按照正常的人能听懂的方式说, 就是有这样一张图,它的节点可以被分为两组(为了方便,在后文中我们分别称这两组节点为X集和Y集),每组中的二一两个节点之间没有边。就是说一个二分图的所有边连接的都是...原创 2021-10-11 14:52:17 · 266 阅读 · 0 评论