
图论
木落淮南,雨晴雲夢
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
P3280 [SCOI2013]摩托车交易(克鲁斯卡重构树+最小瓶颈路)
P3280 [SCOI2013]摩托车交易思路很简单,就是模拟,但是有了(克鲁斯卡重构树+最小瓶颈路)后,时间复杂度降为O(mlogm+nlogn)O(mlogm+nlogn)O(mlogm+nlogn)因为LL的问题,拍了一个晚上,我吐了。#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#define inf 0x7fffffff#define ll long long#define in原创 2022-04-14 20:43:12 · 470 阅读 · 0 评论 -
P2765 魔术球问题(网络流,隐式图构造)
P2765 魔术球问题这道题的思路实在是太罕见了,所以发一篇blog从某一新放入的球开始看起1.放入原来的柱子上2.放入新的柱子并将每个点进行拆点,然后将可以组成平方数的两个树相连,在每次跑网络流的时候记录流的流向即可,如果流量为0,则表明1行不通,只能新来第一个柱子#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#define inf 0x7fffffff#define ll long原创 2022-04-03 21:55:58 · 326 阅读 · 0 评论 -
平面图判定
P3209 [HNOI2010] 平面图判定考虑环的两侧,如发现在异侧则表明,边i和边j的关系是i^j=1#include <bits/stdc++.h>#define inf 0x7fffffff//#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-5//#de原创 2022-03-30 11:45:27 · 652 阅读 · 0 评论 -
P2403 [SDOI2010]所驼门王的宝藏(优化建图+Tarjan+DAG上DP+二分)
P2403 [SDOI2010]所驼门王的宝藏其实想清楚怎么建图怎么DP,怎么Tarjan就很清楚了。如果直接建图直接就存不下,那么可以按行列建图,再将每个特殊点点独立出来,怎么连,显然就是行列点连向特殊点,特殊点根据条件特殊点该怎么连怎么连。另:map不能过,要二分#include <bits/stdc++.h>#include <ext/pb_ds/assoc_container.hpp>#define inf 0x7fffffff#define ll long l原创 2022-03-29 23:02:51 · 147 阅读 · 0 评论 -
P4320 道路相遇(圆方树)
P4320 道路相遇很简单的一道题,手玩样例后发现,答案就是圆方树上的两个点之间的圆点的数量(含自身)#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-5//#defin原创 2022-02-21 14:49:09 · 507 阅读 · 0 评论 -
CF487E Tourists 圆方树套路题
CF487E Tourists题目很套路,现将利用点双建成圆方树,对于每一个点双的方点用于存周边圆点的min,方点需要用multiset维护圆点儿子的值,当然也需要每个点维护自己的权值。建树完成后基本就是树剖的板子了,需要注意的是如果找到最后一点一个点事方点的话,需要将方点的父亲进行统计#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define原创 2022-02-07 17:40:02 · 532 阅读 · 0 评论 -
矩阵树定理
P6178 【模板】Matrix-Tree 定理模板+1#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-18//#define mod 1e9+7//#define l原创 2021-11-26 21:45:57 · 574 阅读 · 1 评论 -
有上下界的网络流(最大流)模板
P4311 士兵占领没有障碍的格子,上界为1,下界是0#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long //#define double long double#define re register int#define void inline void#define eps 1e-8//#define mod 1e9+7#define ls(p原创 2021-11-26 15:22:17 · 644 阅读 · 0 评论 -
网络流 网络格 日字走 奇偶建图
P4304 [TJOI2013]攻击装置P3355 骑士共存问题也是一样套路题,直接套路就行了#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-18//#define m原创 2021-11-25 17:59:36 · 111 阅读 · 0 评论 -
预流推进 HLPP模板
P4722 【模板】最大流 加强版 / 预流推进网络流,最大流算法的最好标算法,时间复杂度上界一般为O(n2m)O(n^2\sqrt{m})O(n2m)本模板除了相应的算法,还加入了上界优化,在随机数据下会更优#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register原创 2021-11-25 10:25:40 · 441 阅读 · 4 评论 -
树同构 树哈希
P5043 【模板】树同构([BJOI2015]树的同构)树哈希的板子,判断两个树是否有一种形态是相同的#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-18//#defi原创 2021-11-20 23:22:20 · 282 阅读 · 0 评论 -
费用流负环处理模板
P7173 【模板】有负圈的费用流有负的费用的处理#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-18//#define mod 1e9+7#define ls(p)原创 2021-11-19 11:41:50 · 848 阅读 · 0 评论 -
一般图最大匹配(奇环处理) 带花树算法
P6113 【模板】一般图最大匹配匈牙利算法最大的问题在于无法处理带奇环的图,如果存在奇环,那么程序会T掉带花树算法就是用于处理奇环的问题#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define原创 2021-11-18 20:57:38 · 538 阅读 · 0 评论 -
全局最小割(Stoer-Wagner)
P5632 【模板】Stoer-Wagner算法板子收集中#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long//#define int long long//#define double long double#define re register int#define void inline void#define eps 1e-5//#define mod 1e9+7#define ls(原创 2021-11-18 20:05:22 · 314 阅读 · 0 评论 -
圆方树模板
P4630 [APIO2018] Duathlon 铁人两项纯圆方树的模板,只要会建图,就会做在求割点(或桥)的基础上 加一个缩点的操作就行,需要注意的是,一个割点可以同时属于多个点双,所以对割点要多次连边#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long#define int long long //#define double long double#define re register int原创 2021-10-25 16:12:51 · 185 阅读 · 0 评论 -
Router Mesh(点双)
Router Mesh题意,给看一张图,求删除每一个点(只删一个点,之后又会加上)后,图会分裂成几个联通分量思路,求点双,和割点设原来的联通分量为tottottot对于割点而言,删除后,联通分量的个数为tot+x−1tot+x-1tot+x−1,xxx是该割点在几个点双之中。对于非割点,答案就是tottottot对于独立点(即单点,也是割点),答案为tot−1tot-1tot−1#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","i.原创 2021-09-21 21:21:46 · 183 阅读 · 0 评论 -
CF600E(树上启发式合并)
CF600E Lomsat gelral第一次写启发式合并,其实就是一种思想,想处理小的(轻儿子),每次处理好后要删除掉他们的贡献,最后处理大的(重儿子),这时就不要删除大的贡献了,然后再加上其他小的的贡献,回溯回去就是所有的贡献。遵循先小后大的原则,同时启发式合并是不带修的时间复杂度极为玄学是O(nlogn)O(nlogn)O(nlogn)最后感谢AgOH大佬的讲解#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#原创 2021-09-16 16:29:48 · 321 阅读 · 0 评论 -
可持久化线段树19+克鲁斯卡尔重构树+倍增
P7834 [ONTAK2010] Peaks 加强版思路先进行克鲁斯卡尔重构树,由于重构之后,边权成为了某些节点的点权,并且满足深度越深,其权值越小,所以问题转化成为,在某个节x向上查到一个刚好小于等于该xxx的节点,所要查询的是该节点及其子树中第kkk大的数,用出点入点记录即可,注意一下插入主席树的节点要是原图上的节点即可#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include <bits/stdc++.原创 2021-09-12 19:33:19 · 108 阅读 · 0 评论 -
克鲁斯卡尔重构树(Network)
Network要求的是,xxx到yyy路径中边权某一路径的最大边权的最小值利用克鲁斯卡尔建树,发现某两点未连,就在这两个点之间则插入一个新节点(作为这两个节点的父节点),新节点的边权,在建树完成后会形成一个新的树,其xxx到yyy路径中边权某一路径的最大边权的最小值就是其LCALCALCA的权值。另外要从新的根节点开始dfsdfsdfs可以参考这篇博客:传送门#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#inc原创 2021-09-12 17:17:10 · 258 阅读 · 0 评论 -
K短路(可持久化左偏树求法)
Remmarguts’ DateA的做法不大稳定,因此采取可持久化左偏树的做法来优化A时间复杂度O(nlogn+mlogm+klogk)O(nlogn+mlogm+klogk)O(nlogn+mlogm+klogk)#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>#include<queue>#define re register int#原创 2021-09-03 17:13:38 · 222 阅读 · 0 评论 -
最短路树模板
CF1005F Berland and the Shortest Paths思路:先用spfa进行预处理,然后进行路径计数,最后进行路径打印这里有个小技巧,链式前向星是从表头插入,因此指针数记为,第几条插入的边。#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long#define int long long//#define double long double//#define double long原创 2021-07-02 11:34:38 · 100 阅读 · 0 评论 -
CF1000E We Need More Bosses(无向图缩点模板+树的直径)
CF1000E We Need More Bosses题意已经很明显了,将图中的环进行缩点,缩点后会形成一棵树,树的直径就是我们所要求的现在的可以找到的是v-dcc,e-dcc缩点,考虑一下环的特点,即没有割边,因此利用割边进行缩点就是我们需要的,这个就挂了个对环缩点的模板分析完了后我们就发现这就是两个模板的组合,所以直接贴模板即可#pragma GCC optimize(2)#pragma GCC optimize(3,"Ofast","inline")#include <bits/s原创 2021-08-17 20:49:19 · 209 阅读 · 0 评论 -
图论--单源最短路
# 图论--单源最短路dijkstra(优先队列优化)spfa(bfs版)spfa(dfs版,没听说过吧)bellman-ford因为以前太懒,所以前没发什么博客。今天本人第一天写博客吧,hh因为本人擅长图论就从图论开始吧。说到图论,不得不提最短路问题。简单看看最短路吧hhdijkstra(优先队列优化)void dijkstra(int s){ memset(d,0x7f,sizeof(d)); memset(v,0,sizeof(v)); d[s]=0; q.push(make_p原创 2021-02-04 16:29:56 · 251 阅读 · 1 评论 -
2021“MINIEYE杯”中国大学生算法设计超级联赛(7) Link with Limit(tarjan)
Link with Limit题目大意:给一个数组a[]a[]a[],求g(x)g(x)g(x)是否收敛,乍看是数学题,其实是图论每一个数据都是相关的,因此一定会形成形成图,且图中每一节点出度为111,所以我们的问题变成了,求图中入度不为000的一些点,也就是找这些图中的环中节点和的平均数是否相等(注意,是平均数)解法:我们可以反向建图,然后缩点,查看入度为0的点,就是我们要找到,也就是说缩点后,比较平均数即可#include <bits/stdc++.h>#define原创 2021-08-11 16:07:32 · 162 阅读 · 0 评论 -
2021牛客暑期多校训练营7 J xay loves Floyd
J xay loves Floyd题目大意:把floyd改成下面这个样子,还有多少个对点之间的距离是正确的初学的时候,我也这么写过的如果点距是正确的,有以下两种情况:情况一:两个点之间只有一条边,或xxx和yyy是同一个点,或xxx无法到达yyy当然对于前两种,我们需要单独把xxx和yyy标记出来,第三种就没有必要了情况二:对于其中间点,kkk,能够满足d[x][k]d[x][k]d[x][k]和d[k][y]d[k][y]d[k][y]是正确的,当然这是在情况一正确的基础上实现的我们原创 2021-08-08 18:07:19 · 203 阅读 · 0 评论 -
2021牛客暑期多校训练营5 J Jewels(KM)
J Jewels题目大意:矿工捞宝石,宝石在海里,每一宝石都有一个三维坐标(xi,yi,zi)(x_i,y_i,z_i)(xi,yi,zi),且以viv_ivi的速度下沉,因此第iii秒后的坐标是(xi,yi,zi,+(i−1)∗vi)(x_i,y_i,z_i,+(i-1)*v_i)(xi,yi,zi,+(i−1)∗vi)定义抓取每个宝石的代价为当前位置到原点位置的平方,每次抓宝石都会瞬间移动(每秒一次),问抓取所有的宝石的最小代价思路:首先,如果要代价最小,一定要在nnn秒内抓完所原创 2021-08-05 17:39:43 · 122 阅读 · 0 评论 -
2021牛客暑期多校训练营6 J Defend Your Country(割点,点双联通分量)
Defend Your Country题目大意:给你一张无向连通图,每个节点有一个权值,需要让图的”重要级别”最大化”重要级别”计算方式:(−1)x(-1)^x(−1)x∗∑ai*\sum a_i∗∑ai其中xxx是联通图中点数,可以通过把连通图拆成几个,来最大化”重要级别”思路:很显然,如果,节点总数如果是偶数,答案就是所有节点权值的和如果是奇数:一个思路,就是所有节点权值的和,减去最小的一个可以加去的节点权值的两倍可以减去的节点,来源于一下情况:如果这个点不是割点,可以直接更新一原创 2021-08-04 19:02:00 · 146 阅读 · 0 评论 -
最短路树2
CF1076D Edge Deletion这道题只需要求一个解就可以了,因此不需要像前一个题一样用vector记录#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long#define int long long//#define double long double//#define double long long#define re int//#define void inline void#d原创 2021-07-03 14:12:28 · 78 阅读 · 0 评论 -
2021牛客暑期多校训练营3 J Counting Triangles(正难则反)
J Counting Triangles译文:Goodeat 找到一个有 n 个顶点的无向完全图。 图形的每条边都涂成黑色或白色。 他要你帮他找出三角形 (a, b, c) (a < b < c) 的个数,使得 (a, b), (b, c), (c, a) 之间的边具有 相同的颜色。 为了避免输入尺度过大,我们使用以下代码在图中生成边。大意:给一个邻接矩阵存图,图的没一条边有一个颜色,黑色或白色,求三条边为同一颜色的三元环拿到一看,不是三元环计数吗,刚好手里有板子,加上去就T了,后来一想原创 2021-07-25 16:07:16 · 153 阅读 · 0 评论 -
寻找大小为k的完全子图
.CF1439B Graph Subset Problem题意如下:您将获得一个具有 nn 个顶点和 mm 个边的无向图。 此外,您将获得一个整数 kk 。找到一个大小为 kk 的团或一个非空的顶点子集,使得该子集的每个顶点在该子集中至少有 kk 个邻居。 如果没有这样的集团和子集报告它。如果顶点的子集的大小为 kk 并且在该子集的每两个顶点之间存在一条边,则该顶点子集称为大小为 kk 的团。 如果一个顶点之间存在边,则称为另一个顶点的邻居。思路:其实题意已经提示的已经很清楚了,就是从度数小于k原创 2021-07-21 20:36:10 · 1013 阅读 · 0 评论 -
动态加边求割边数
Network题目大于每次查询在原有图上加上一条边,求割边数(加后不撤回)分析:可以在查询前预处理割边数,并记录前驱节点,然后利用边双联通分量缩点,然后利用LCA(最朴素的方式,不能用倍增tarjan处理)的方式更改,记录减少的割边数如果缩点后处于一个点内则不做处理,反之做将整个链上的点除去割边记录处理方式一:在tarjan时,将割边两点的一个一个点记录,LCA时消去记录不缩点,tarjan时记录前驱,LCA是沿着前驱先前处理#pragma GCC optimize(2)#pragma G原创 2021-07-12 23:06:45 · 232 阅读 · 0 评论 -
k短路模板(含SPFA的SLF优化和A*)
P4467 [SCOI2007]k短路需要建一张正想图和一张反向图,spfa跑反向图,A*跑正向图(利用估价函数,第k个到达终点的路径即为k短路)由于洛谷卡A*,所以打了张表#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long#define int long long//#define double long double//#define double long long#define re re原创 2021-07-09 18:03:36 · 165 阅读 · 0 评论 -
最小斯坦纳树模板(边权)
P6192 【模板】最小斯坦纳树i是以i为根的数,s是其中所有点的最小代价f[i][s]+w(i,j)->f[j][s] 采取最短路操作f[i][sub]+f[i][s^sub]->f[i][s] 采取状压操作(背包思想)sub是其中一颗子树#include <bits/stdc++.h>#define inf 0x7fffffff#define ll long long#define int long long//#define double long dou原创 2021-07-07 10:14:05 · 165 阅读 · 0 评论