图论
文章平均质量分 82
图论图论图论
IcecreamArtist
咸鱼
展开
-
八月刷题记录3
牛客多校10 A Browser Games原创 2021-08-26 22:32:24 · 86 阅读 · 0 评论 -
八月刷题记录2
洛谷P4551 最长异或路径给定一棵 n 个点的带权树,结点下标从1开始到 n。寻找树中找两个结点,求最长的异或路径。异或路径指的是指两个结点之间唯一路径上的所有边权的异或。01trie板子任意指定一个点为根。建一棵01trie,这棵trie存所有点到根的路径的异或值。考虑到路径(u,v)的异或=路径(root,u)^(root,v),因此对于每一个点到根的异或值,我们都在01trie上找到另一个点到根的异或值,满足两者异或最大。维护这个最大值。如何找?高位往下找,能不同就贪心的取不同。因为这样原创 2021-08-17 13:31:59 · 107 阅读 · 0 评论 -
八月刷题记录
BZOJ3522. [Poi2014]Hotel给一棵树,问两两之间距离相等的点对有多少对。点数为5000。树形dp+统计满足条件的三元组(用差分来统计,即建立两个数组,表示一元组数目、二元组数目)枚举根节点,对每个子树跑一边dfs统计距离为x的点数。时间复杂度O(n2)O(n^2)O(n2)//// Created by artist on 2021/8/5.//#include<bits/stdc++.h>using namespace std;typedef l原创 2021-08-05 15:49:44 · 167 阅读 · 0 评论 -
【图论:进阶】建模
全局最小割算法:stoer wagner一般图最大权匹配原创 2021-06-15 21:02:12 · 59 阅读 · 0 评论 -
Graph theory 0x06 【二分图】
二分图最大匹配匈牙利算法二分图最大权匹配KM(Hungarian Algorithm(Kuhn-Munkres Algorithm))算法魔改刘汝佳板子O(n3)O(n^3)O(n3)#include<bits/stdc++.h>using namespace std;const int maxn = 100;int W[maxn][maxn],n;int Lx[maxn],Ly[maxn];int _left[maxn];bool S[maxn],T[maxn];int原创 2021-03-02 23:03:14 · 83 阅读 · 0 评论 -
Graph theory 0x05 【网络流】
最大流基本问题,基于有向图。流量守恒反对称性容量限制算法“增广路”算法。Edmonds-Karp、Dinic“预流推进”算法。ISAPFord-Fulkerson方法数据结构课讲的那个。重点在于residual network和其反向路径。Edmonds-Karp最简单,复杂度高,小图,因此直接邻接矩阵。O(VE2)O(VE^2)O(VE2)HDU 1532 Drainage Ditches Edmonds-Karp模板#include<bits/stdc++.h&原创 2021-02-03 13:36:24 · 107 阅读 · 0 评论 -
Graph theory 0x04 【SAT】
先续0x03的TarjanHDU 3836 Equivalent Sets 给有向图,至少添加多少边才成为强连通图?思路:tarjan缩点。对于强连通缩点图中的每一个点,一定至少有一个出度和一个入度。我们就求缩点图中有多少个点的入度为0,多少个点的出度为0.答案就是max(a1,a2)。#include<bits/stdc++.h>using namespace std;const int maxn = 20004;int low[maxn],num[maxn],dfn,cnt原创 2021-01-21 16:59:52 · 81 阅读 · 0 评论 -
【codeforces上紫】图论
cfedu100 E. Plan of Lectures题意拓扑排序加强版。n个数,每个数指定一个祖先,这个祖先一定要出现在当前数之前。形成一颗树。然后有k个额外条件,每个条件给出x和y,要求给所有点进行拓扑排序,且x一定刚好在y之前一位。如果这样的拓扑排序不存在,输出0,否则输出排序。思路dsutoposorting(dfs)constructive algorithm先找一种可能解,再判断这个解是否成立。若这个解不成立,则排序不存在。找到一种改图的方式,使之能进行拓扑排序。把x与y原创 2020-12-19 17:30:18 · 184 阅读 · 1 评论 -
Graph theory 0x03【最短路】
Floyd性质算任意两点的最短距离可含负权边板子无向图初始化:CLR(mp,INF);FOR(i,1,e){ int a,b,l; scanf("%d%d%d",&a,&b,&l); mp[a][b]=l,mp[b][a]=l;}FOR(i,1,m) FOR(j,1,m) path[i][j]=j; //记录路径算法主干:FOR(k,1,m) FOR(i,1,m) FOR(j,1,m) //枚举中原创 2020-10-16 17:10:32 · 51 阅读 · 0 评论 -
codeforces round #668 (Div. 2)
传送门前言段位给我抖掉了()我真是个菜鸡(哭)B. Array Cancellation思路正解答案是最大后缀和。题解有证明,反正我是没想出来()证明大意:观察发现,(1)免费的操作只会造成区间后缀和的增加。(2)最终结果要求全0,此时后缀和都为0。因此,花费至少是初始状态中的最大后缀和。那么为什么花费是最大后缀和(设为M)的时候刚好可以满足条件呢?此时可以这样操作:花费M,将1号提升M,n号降低M。此时,后缀和(除了第一个)全体下降M。显然,此时所有后缀和<=0;然后,从原创 2020-09-07 22:38:56 · 123 阅读 · 0 评论 -
Graph theory 0x02 【连通性】
无向图的连通性原创 2020-09-05 14:07:00 · 189 阅读 · 0 评论 -
Graph theory 0x01【树上问题】
diameter of a tree咕咕咕+++++++++++++++++++++ 分界线 +++++++++++++++++++++LCAalgorithm倍增binary liftingTarjan用欧拉序列转化为 RMQ 问题树链剖分动态树标准RMQ用途/性质树上距离题目洛谷 3379 LCA模板倍增:处理两个地方:(1)达到同一深度(2)找lca#include<iostream>#include<string.h>#incl原创 2020-08-19 21:50:20 · 257 阅读 · 0 评论 -
Graph theory 0x00【图论初丁】
拓扑排序POJ 1270 Following the order(DFS+拓扑排序)#include<iostream>#include<stdio.h>#include<set>#include<cstdio>#include<string.h>#include<cstdlib> #include<stack> #include<queue> #include<algorithm原创 2020-08-05 16:19:15 · 91 阅读 · 0 评论 -
[ACM]【BFS/压缩图/vector】Atcoder 168 .(Single Dot)
.(Single Dot)传送门题意:给若干横着和竖着的线段(栅栏),求位于(0,0)的牛可以往外走的面积。思路:我是真的不会(。看了大佬给的题解,原来是把图片压缩,用二维网格表示,每条线都紧挨着,然后暴力BFS。(思路就是这么简单)重点在于如何实现把图片压缩。为了方便理解,画了三个图:图一是原图的亚子。线段有正有负,牛在原点处。然后,我们根据原图的线段的相对位置,建立一个新图。此时,每两条线段之间,如果是空的,即变为紧挨着。粉色区域为无限区域,如(0,0)代表的是(-inf,-inf原创 2020-05-24 16:50:02 · 353 阅读 · 0 评论 -
[ACM]【容斥原理/树形DFS】Atcoder163 path pass i
path pass i题意:有一棵树,每个点有不同颜色(也有相同)。计算包括每种颜色的点的路径数目。注意颜色的序号范围是1至N,与点的数目是一样的,所以输出(除非颜色数目与点数目相等)肯定有一些答案为0。思路:因为本人太菜,补这道题补到现在才会才A。首先,最重要的思路是容斥原理。经过思考后会发现,如果算包含一种颜色的点的路径,是很困难的。(1-2-3包含2,2-3也包含2,2也包含2...原创 2020-04-23 15:57:51 · 339 阅读 · 0 评论 -
[ACM]【树形DP/LCA】牛客练习赛62 牛牛染颜色
牛牛染颜色传送门题意:给出一个有根树,求满足条件的染色方案的数目,条件:任意两个染黑的点的LCM必须也为黑点。思路:我一看到LCM就会想到自己还不会倍增的恐惧 很显然的树形DP。既然是DP,就只用考虑初始状态和状态转移。状态转移方程:(dp[u][1]为将u点染黑,dp[u][0]为不染)dp[u][0]=1+∑v∈son[u](dp[v][1]+dp[v][0]−1)dp[u][0...原创 2020-04-26 09:42:50 · 900 阅读 · 3 评论 -
[ACM]【余数/Dijkstra/DP】牛客练习赛62 牛牛的呱数
牛牛的呱数传送门题意:n个大数,每个可选无限个,人选若干个,拼凑成p的倍数。求最短的这样的拼凑数的长度。思路:首先,遇到大数+整除我们就预处理每个大数mod(p)mod(p)mod(p)的值和大数的长度。遇到拼接我们就预处理10的倍数mod(p)mod(p)mod(p)的值们。然后,我们面临的问题就是,如何组合这些大数,使得mod(p)mod(p)mod(p)为0且最短。菜鸡心路历程...原创 2020-05-01 17:06:59 · 179 阅读 · 0 评论 -
[ACM]【树形DP/LIS/DFS/二分查找】Atcoder 165 LIS on Tree
LIS on Tree传送门题意:一棵树,每个节点有一个值,计算从1分别到其他点的途径中,点权序列的最长子序列(LIS)长度。思路:LIS是典型的DP问题。关于计算LIS有两种解法,一种O(N2)O(N^2)O(N2),一种O(NlogN)O(N\log N)O(NlogN)。后者运用了二分查找lower bound。具体参考这个博客。dp[i]dp[i]dp[i]记录LIS第iii位...原创 2020-05-08 00:26:07 · 165 阅读 · 0 评论 -
[ACM]【分层图最短路/dijkstra】牛客算法周周练5 小雨坐地铁
小雨坐地铁传送门题意:n个站,m条双向地铁线路,每条地铁上地铁要掏ai元,每坐一站多掏bi元,有ci站。求从s点到t点最少花费。思路:显然dijkstra,但是怎么建图呢,是个好问题()。不会分层图的我大概纠结了一万年吧(如果直接朴素dijkstra的话,要记录每个点现在所处的线路,有转线和继续该线路走两种。而继续该线路走的话要记录此点在该线路的位置,有两个方向…总之我写了贼久最后放弃了)。看了题解才知道,原来还有分层图这么个东西,了解了逻辑之后,这道题其实就是分层图最短路的裸题。思路不难,理解原创 2020-05-09 10:51:12 · 287 阅读 · 0 评论