随笔分类 - ACM—图论
摘要:题单来源 VJ题单 树形dp模型: 以某一个节点为根,满足一定条件下的最大结果。这类题多自上向下转移,由已经算好的u的维护信息 更新 v所维护的信息。 H题中的1-k问题,可以转换成第k大的模型去解决。 如J题涉及两点间路径选择,一般转移很多。 F题,与背包问题组合 A_CF686D Kay and
阅读全文
摘要:Loj.2491 题意: 给一棵有根树,对Q次询问,每次输入x,y,k。输出树上x到y的路径上点的深度的k次方和。 思路: 树上两点间路径的权值和很容易想到LCA, 然后发现可以预处理深度的k次方的前缀和。对每个x和lca之间点的深度肯定是连续和,其深度k次方和(不算lca点)是sum[d[x]][
阅读全文
摘要:补题地址 欧拉回路模板题。 思路 这个的关键是:当我们用链式前向星存图时,读第 i 条边(x, y) 如果是无向边:(x,y) 边存的编号是(i - 1) * 2,反向边 (y,x) 边的编号是(i - 1) * 2 + 1。 如果是单向边:(x,y) 边的编号是 i - 1。 所以如果是有向图,&
阅读全文
摘要:Luogu P3953 逛公园 (最短路+dp) 补题地址 题意: 一个有向图,找从1到n的长度在 d 到 d + k 之间的路径个数模 p 的值。(d是1到n的最短路,k,p由输入给出)。 思路: 首先想到dp[i][j]表示1到 i 距离为j的路径个数,那么dp[n][d] + ... + dp
阅读全文
摘要:LOJ#2718. 「NOI2018」归程 (kruskal重构树) 参考博客 题意: 在无向图中,每条边的属性不仅有距离,还有海拔。有Q次询问,每次给出两个值v,p表示一个人从v点出发回到家(家在1点),且世界的海平面海拔是P。也就是小于p的路都在水中。现在这个人可以开车走一段路直到遇到低于海平面
阅读全文
摘要:Kruskal重构树 前置知识:Kruskal算法, LCA 最近刚学,如有错误欢迎提出。 对图建Kruskal重构树的主要作用:求原图中两个点所在路径上的最长边的最小值或最短边的最大值。 如何建Kruskal重构树 在Kruskal的基础上,当两个点x, y 不再一个并查集中,那么我们就再引入一个
阅读全文
摘要:有关MST的两道题 紧急更新:下面两类题不是说一定和MST有关,只是第一类要从大到小贪心处理边,第二类从小到大贪心处理边,直到图联通。好像和MST思想一样。我废话了。 第一道题:旅行(牛客) 第二道题:Maximum Distance(cf) 在第一题中:一条 u 到 v 的路径的 $cost(u,
阅读全文
摘要:DSU on tree 树上启发式合并 自为风月马前卒dalao的博客 首先介绍一下大概流程: 首先处理所有轻链。 如果有重链,再处理重链。注意重链的值不删除。 这样只需要把轻链的贡献算一下加上就好了,不需要处理重链。 最后,如果是轻链,就要删除其对贡献的影响。 void dfs(int u, in
阅读全文
摘要:2-SAT #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<vector> #includ
阅读全文
摘要:参考博客 补题链接 这个题太妙啦。2-SAT和两个状态有关,但是显然如果考虑门的开和关那基本没什么思路,因为两个门基本相互独立。但是如果考虑🔑的使用(1)还是不使用(0)两个状态会发现,两个🔑直接还是有一些相互限制的要求的。比如本题要所以门都变成1,且每个门有两个🔑,所以如果原来门是1的那么它
阅读全文
摘要:先用Dijkstra计算出1到i的最短路d[i]。再dfs时如果 d[u] + w == d[v] 时就一直继续向下搜索。这些边都可以保留 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #inclu
阅读全文
摘要:#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<vector> #include<stri
阅读全文
摘要://推荐博客// // 2-SAT模板题 #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<queue> #include<
阅读全文
摘要://2020/8/24/21:07 #include <cstdio> #include <iostream> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <vector> #
阅读全文
摘要:基环树 / 环套树 参考资料: oi-wiki图论相关概念 岛屿题解 基环树 最近开始学基环树,思路不是很难但是实现有点难复杂,很考验基础能力。 什么是基环树: 如果一张无向连通图包含恰好一个环,则称它是一棵 基环树 。 如果一张有向弱连通图每个点的入度都为 1,则称它是一棵 基环外向树 。 如果一
阅读全文
摘要:P4315 月下毛景树 补题地址 这是一道树剖~~(线段树)~~好题 。思路就是树链剖分,然后线段树维护最值。 这道题麻烦在两点: 边权转点权 区间加 + 区间覆盖的 lazy 标记处理 (要强调本线段树维护最值) 首先边权转点权处理,其实如果做过 P3038 那边权转点权并不是什么大问题,只要把点
阅读全文
摘要:#include<bits/stdc++.h> using namespace std; #define rep(i, a, n) for(int i = a; i <= n; ++ i); #define per(i, a, n) for(int i = n; i >= a; -- i); typ
阅读全文
摘要:2020暑假牛客多校9 B - Groundhog and Apple Tree (树形dp) 补题链接 参考博客 题目大意: 给一个树,走每条边会减hp, 走到点会加hp,原地等待也会加hp, 问最少原地等待时间使得能够遍历所有点。每条边最多走两次。 题解: 首先每条边最多走两次那也就dfs一遍树
阅读全文
摘要:C Decrement on the Tree 参考博客 题目: 一棵树每次选择一条路径将路径上的边权都减1,问最少多少次操作后所有边权变成0。 题解: 看了好几篇博客才明白了,这道题的做法是将对边权的处理转变成去想对点的处理,算各点的贡献。之所以可以这样做是基于给一条边的边权-1,相当于访问这条边
阅读全文
摘要:参考博客 题意: 给你一个图G,问补图上s到其他n-1个点的最短路。 题解: bfs + set。每次把u点不相连的点入队列,取更新。具体见代码。 #include<bits/stdc++.h> using namespace std; #define rep(i, a, n) for(int i
阅读全文

浙公网安备 33010602011771号