
图论
爱睡觉的Raki
我不能只做观众
展开
-
Simple record Part2.3
CF1276B Two FairsCF1105D Kilani and the GameCF1095F Make It ConnectedCF1012B Chemical tableCF14D Two PathsCF500D New Year Santa Network1.CF1276B Two Fairs#include<bits/stdc++.h>#define int long longusing namespace std;constexpr int maxn=2.原创 2020-12-26 16:48:08 · 154 阅读 · 1 评论 -
Simple record Part2.2
CF25D Roads not only in BerlandCF1205B Shortest CycleCF1242B 0-1 MSTCF1307D Cow and FieldsCF1228D Complete Tripartite1.CF25D Roads not only in BerlandMain idea:find all the loops and break it,connet all the components.Thinking of problem solving:D.原创 2020-12-15 21:37:09 · 253 阅读 · 0 评论 -
简单记录 Part1.3
CF1242B 0-1 MST1.CF1242B 0-1 MST求补图中联通块个数先找到原图中度数最小的点,该点在补图中度数最大,标记原图中与其相连的所有点,补图中所有的点都与其相连暴力遍历每个点,若已经与度最小的点相连或者为该点则跳过,标记与该点相连的所有点,与未标记的所有点相连边数最多只有10510^5105条,复杂度并不会很大#include<bits/stdc++.h>#define int long longusing namespace std;constexp.原创 2020-12-10 21:56:25 · 132 阅读 · 0 评论 -
简单记录 Part1.2
CF700B Connecting UniversitiesCF1081D Maximum DistanceCF263D Cycle in GraphCF645D Robot Rapping Results ReportCF1067B MultihedgehogCF67A Partial Teacher789101.CF700B Connecting Universities记录每条边会被多少个大学走过#include<bits/stdc++.h>#define i.原创 2020-12-08 20:01:50 · 222 阅读 · 0 评论 -
简单记录 Part1.1
1.CF1328D Carousel分类讨论:1:为偶数,输出12121212…2:为奇数,但是有两个连续的图形相同,从此位置断开输出121212…且没有任何相邻的图形相同,输出121212…3#include<bits/stdc++.h>#define int long longusing namespace std;constexpr int maxn=4e5+5,inf=0x3f3f3f3f,mod=1e9+7;int n,m,t,a[maxn],res[maxn];原创 2020-12-05 18:00:17 · 885 阅读 · 0 评论 -
最短路径树简谈
在最开始,我们要知道最短路径树是个什么东西,不同于最小生成树,最短路径树是选一个节点为根,得到一颗树上的所有点,与原图中根节点到其的最短距离相等。因为很多要用到边的记录,然而我比较菜只会用链式前向星方便的记录边,所以在写最短路路径树的过程中全用的链式前向星存图(先来个比较板子的CF545E Paths and Trees题意:给定一张带正权的无向图和一个源点,求边权和最小的最短路径树。思路:在跑dij的过程中记录每个点的前驱边,因为题目要求边权和最小,所以如果遇到相同的最短距离,我们应该选取前驱边原创 2020-12-05 17:05:04 · 504 阅读 · 0 评论 -
Ten graph questions of about 2000 difficulty of Codeforces Round 1
1.CF1187E Tree Painting题目:给定一棵n个点的树 初始全是白点要求你做n步操作,每一次选定一个与一个黑点相隔一条边的白点,将它染成黑点,然后获得该白点被染色前所在的白色联通块大小的权值。第一次操作可以任意选点。求可获得的最大权值思路:显然换根dpson[i]son[i]son[i]表示第iii个点这棵树的大小,f[i]f[i]f[i]代表以iii点为根子树的答案每个点获得的价值= son[i]son[i]son[i]+所有子树的fff开始换根f[1]=son[1原创 2020-09-28 19:45:30 · 229 阅读 · 1 评论 -
Ten graph questions of about 2000 difficulty of Codeforces Round 2
1.CF702E Analysis of Pathes in Functional Graph题意:有一个 nnn 个点 nnn 条边的带权有向图(点编号000 ~n−1n-1n−1),每个点有且仅有一条出边,对于每个点iii求出由iii出发经过kkk条边,这kkk条边的权值最小值和权值和。思路:倍增由于k太巨大,硬跑是肯定不行的,然后每个点有且仅有一条出边,所以可以用倍增(预处理的方式跟ST表差不多#include<bits/stdc++.h>#define int long lo原创 2020-09-28 19:44:08 · 140 阅读 · 0 评论 -
Codeforce 1900Difficulty Graphs 20 questions
开坑原创 2020-09-28 19:43:38 · 198 阅读 · 0 评论 -
Codeforce 1800Difficulty Graphs 20 questions
1.CF1324F Maximum White Subtree给定一棵 nnn 个节点无根树,每个节点 uuu 有一个颜色 aua_uau,若 aua_uau 为 000 则 uuu 是黑点,若 aua_uau 为 111 则 uuu 是白点。对于每个节点 uuu,选出一个包含 uuu 的连通子图,设子图中白点个数为 cnt1cnt_1cnt1,黑点个数为 cnt2cnt_2cnt2,请最大化 cnt1−cnt2cnt_1 - cnt_2cnt1−cnt2。并输出这个值。1≤n≤2×1原创 2020-09-28 19:42:45 · 255 阅读 · 0 评论 -
Codeforce 1700Difficulty Graphs 20 questions
1.CF427C Checkposts题意:建立一些站点,如果有一个检查站在i路口,保护j的条件是:i==j或者警察巡逻车可以从i走到j,并且能回到i。求最小花费和用最少点的方案数显然是强连通分量在跑tarjan的过程中记录每个强连通分量中cost的最小值,在输出时遍历累乘即可要开longlong,wa了两发#include<bits/stdc++.h>#define int long longusing namespace std;constexpr int maxn=3e5+原创 2020-09-28 19:42:06 · 252 阅读 · 0 评论 -
Codeforce 1600Difficulty Graphs 20 questions
1.CF601A The Two Routes一个图有两种路,有这种路就没有那种路,求走两种路达到终点的时间原图和补图跑Floyd判断联通即可#include<bits/stdc++.h>using namespace std;int n,m;const int maxn=405,inf=0x3f3f3f3f;int dis1[maxn][maxn],dis2[maxn][maxn];int main(){ memset(dis1,inf,sizeof dis1); mems原创 2020-09-28 19:41:29 · 205 阅读 · 0 评论 -
Raki的网络流24题题解总结
网络流24题:from:LuoguP4011 孤岛营救问题P2756 飞行员配对方案问题P2761 软件补丁问题P4016 负载平衡问题P3358 最长k可重区间集问题P4014 分配问题P4009 汽车加油行驶问题P4015 运输问题P2774 方格取数问题P4012 深海机器人问题P2762 太空飞行计划问题P2770 航空路线问题P2754 [CTSC1999]家园 / 星际转移问题P3254 圆桌问题P1251 餐巾计划问题P2763 试题库问题P2766 最原创 2020-08-15 22:42:24 · 918 阅读 · 0 评论 -
Raki的图论入门到进阶算法简单总结
图论基础概念戳这里oiwiki1.图的存储与遍历图是相对线性数据结构更高级的模型,可以1对多也可以多对1,点与点之间,边与边之间都可以加上更多的限制,使其变得非常灵活,下面介绍两种最常用的图的存储方法1.1 vector存图用vector存图,会比较直观好懂先弄出一个结构体,vvv为到达的顶点,www为这条边的边权struct edge{ int v,w;};vector<edge>e[maxn];存储e[u].push_back((edge){v,w});遍历fo原创 2020-08-09 18:14:34 · 806 阅读 · 0 评论 -
能力提升综合题单Part 8.9.3 费用流
P3381 【模板】最小费用最大流P4016 负载平衡问题P4452 [国家集训队]航班安排P2045 方格取数加强版P2050 [NOI2012]美食节P2053 [SCOI2007]修车P2604 [ZJOI2010]网络扩容P2770 航空路线问题P3159 [CQOI2012]交换棋子P3356 火星探险问题 P3358 最长k可重区间集问题P4013 数字梯形问题P4015 运输问题P5331 [SNOI2019]通信1.P3381 【模板】最小费用最大流类din.原创 2020-07-22 19:18:16 · 368 阅读 · 1 评论 -
2020牛客多校训练1 I 1or2(拆点拆边带花树&一般图最大匹配)
2020牛客多校第一场 I 1or2题意:问选择任意选择一些边能否让各点的度数刚好等于题目所要求的度数正解:一般图最大匹配(带花树)水解:最大流由于题目数据太水,我用HDU3551的一组样例来举例:输入:4 41 23 42 31 41210输出Yes不同于我能找到的那些题解的思路,直接拆度拆边(我不知道为什么我那样写写挂了),而是先记录每一条边对点的度数总贡献,1.如果总贡献都达不到给出的要求,直接输出NoNoNo2.如果刚好,则不用去管与这个点相连的边,直原创 2020-07-16 12:07:22 · 492 阅读 · 0 评论 -
2020牛客多校训练2 I Interval(对偶图最短路求最小割)
先转化成网格图,跑最大流是不可能跑最大流的,这数据范围一下就卡死,而且还要开mapmapmap来判重只能跑跑对偶图最短路这样子对偶图图如图所示,除了网格本来有的边之外的图就是对偶图,思想就是用两个点把你原图有的边给割掉,两点间的权值也等于原图这条边的权值,跑出来的最短路即为最小割解释一下建图方式:如果j>nj>nj>n就连到汇点如果i<1i<1i<1就连到源点建图完直接dijdijdij最短路即可(作死用spfaspfaspfa的话开心就好)完整代码:.原创 2020-07-14 18:26:20 · 1203 阅读 · 0 评论 -
2020牛客多校训练1 H Minimum-cost Flow(最小费用流)
H题先给出每条边的费用,qqq组询问,问当每条边的流量为u/vu/vu/v时,跑到流量为1的最小费用看到数据范围就知道肯定最多只能跑一次费用流,不然会直接TTT飞思路:求最小费用流的过程中记录每一次增广路增加的流和费用,用mapmapmap记录,最后贪心选择费用小的边进行输出(官方题解和一般的题解我一个都看不懂)#include<bits/stdc++.h>#define int long longusing namespace std;const int inf=0x3f3f原创 2020-07-12 23:59:05 · 999 阅读 · 0 评论 -
能力提升综合题单 Part 8.9.2 最小割
P1344 [USACO4.4]追查坏牛奶Pollutant ControlP1345 [USACO5.4]奶牛的电信TelecowmunicationP2057 [SHOI2007]善意的投票 / [JLOI2010]冠军调查P2598 [ZJOI2009]狼和羊的故事P2774 方格取数问题P4126 [AHOI2009]最小割P5039 [SHOI2010]最小生成树1.P1344 [USACO4.4]追查坏牛奶Pollutant Control第一问求最小割第二问求最小割边数.原创 2020-07-11 18:13:14 · 276 阅读 · 0 评论 -
能力提升综合题单 Part 8.9.1 最大流
P3376 【模板】网络最大流P4722 【模板】最大流 加强版 / 预流推进P2065 [TJOI2011]卡片P2763 试题库问题P2472 [SCOI2007]蜥蜴P2754 [CTSC1999]家园 / 星际转移问题P2765 魔术球问题P2766 最长不下降子序列问题P4174 [NOI2006]最大获利P2805 [NOI2009]植物大战僵尸P3749 [六省联考2017]寿司餐厅1.P3376 【模板】网络最大流#include<bits/stdc++.h.原创 2020-07-10 19:10:08 · 379 阅读 · 0 评论 -
能力提升综合题单 Part 8.8 二分图
P3386 【模板】二分图最大匹配P2756 飞行员配对方案问题P1129 [ZJOI2007]矩阵游戏P1559 运动员最佳匹配问题P2423 [HEOI2012]朋友圈P2764 最小路径覆盖问题P2825 [HEOI2016/TJOI2016]游戏P3033 [USACO11NOV]Cow Steeplechase GP3731 [HAOI2017]新型城市化P4014 分配问题1.P3386 【模板】二分图最大匹配...原创 2020-07-04 17:42:51 · 373 阅读 · 1 评论 -
能力提升综合题单 Part 8.7 图的连通性相关
P3387 【模板】缩点P3388 【模板】割点(割顶)P2341 [USACO03FALL][HAOI2006]受欢迎的牛 GP2863 [USACO06JAN]The Cow Prom SP2746 [USACO5.3]校园网Network of SchoolsP1407 [国家集训队]稳定婚姻P2272 [ZJOI2007]最大半连通子图P3225 [HNOI2012]矿场搭建P5058 [ZJOI2004]嗅探器P2515 [HAOI2010]软件安装1.P3387 【模板】.原创 2020-07-01 20:33:21 · 290 阅读 · 0 评论 -
能力提升综合题单 Part 8.4 生成树&Part 8.5 拓扑排序&Part 8.6 差分约束
P3366 【模板】最小生成树P4180 [BJWC2010]严格次小生成树P2872 [USACO07DEC]Building Roads SP1991 无线通讯网P1967 货车运输P4047 [JSOI2010]部落划分P1113 杂务P1983 车站分级 P1038 神经网络P5960 【模板】差分约束算法P3275 [SCOI2011]糖果P2294 [HNOI2005]狡猾的商人P4926 [1007]倍杀测量者P5590 赛车游戏1.P3366 【模板】最小生成.原创 2020-06-22 18:08:32 · 285 阅读 · 0 评论 -
能力提升综合题单 Part 8.3.3 最近公共祖先
两个点的最近公共祖先,即两个点的所有公共祖先中,离根节点最远的一个节点。求解最近公共祖先,常用的方法是树上倍增或者树链剖分。P3379 【模板】最近公共祖先(LCA)P3938 斐波那契P4281 [AHOI2008]紧急集合 / 聚会1.P3379 【模板】最近公共祖先(LCA)倍增法求lca,tarjan还没学…总体思路是记录每个点的深度,并记录它的第2^i的祖先的是哪个节点把log2(i)+1进行打表储存求lca的时候先让x>y,然后跳到同一深度倍增跳到他们的lca的下一原创 2020-06-19 22:54:26 · 355 阅读 · 0 评论 -
能力提升综合题单Part 8.3.1 二叉树&Part 8.3.2 树的直径
P1087 FBI树P1030 求先序排列P1305 新二叉树P1229 遍历问题P5018 对称二叉树P5597 【XR-4】复读P2195 HXY造公园P3629 [APIO2010]巡逻P5536 【XR-3】核心城市P1099 树网的核P4408 [NOI2003]逃学的小孩1.P1087 FBI树递归求解,判断是否为’0’串或者’1’串即可#include<bits/stdc++.h>using namespace std;string a;int .原创 2020-06-18 23:31:21 · 287 阅读 · 0 评论 -
能力提升综合题单Part 8.2 最短路问题
P5905 【模板】Johnson 全源最短路P1144 最短路计数P1462 通往奥格瑞玛的道路P1522 [USACO2.4]牛的旅行 Cow ToursP1266 速度限制P4001 [ICPC-Beijing 2006]狼抓兔子P4568 [JLOI2011]飞行路线P3238 [HNOI2014]道路堵塞P5304 [GXOI/GZOI2019]旅行者1.P5905 【模板】Johnson 全源最短路利用一个骚势能公式让dij可以跑负权图思路是先建一个超级源点跟每个点建一.原创 2020-06-17 22:17:32 · 303 阅读 · 0 评论 -
能力提升综合题单Part 8.1 图的存储与遍历
Part 8.1 图的存储与遍历这里的图论内容都比较简单,涉及图的存储以及遍历图的方式。好骗!还好不是刚学图论,不然要究极自闭了1.P2661 信息传递看似像个憨批题其实T到哭求最小强连通分量#include<bits/stdc++.h>using namespace std;const int maxn=4e5+5,maxm=4e5+5;int n,m;int dfn[maxn],low[maxn],vis[maxn],z[maxn],color[maxn],cnt[原创 2020-06-17 21:41:48 · 264 阅读 · 0 评论 -
牛客 动物森友会(最大流+二分)
链接:https://ac.nowcoder.com/acm/problem/205306来源:牛客网Compute 最近开始玩动物森友会了。这个游戏的时间与现实时间是同步的(一周有 7 天),而一些特定事件只会在一周的某些天解锁。我们假设有 n个不同的事件,而每个事件都会给予不同的材料,并且每个事件只会在一周中的特定几天开放,在开放的时间内可以完成多次。但由于 Compute 要参加训练,他每天并没有多少时间玩游戏,所以他每天最多只能完成 e次事件。现在 Compute 想做出一件非常稀有的道具原创 2020-06-14 22:52:34 · 289 阅读 · 0 评论 -
刷题记录 kuangbin带你飞专题九:连通图
这个专题实属虐心…各种debug搞到自闭不过进步就是在自闭中产生的…后面被反向边逼迫使用了链式前向星建图(双修?)1.POJ 1236 Network of Schools任务一:求出入度为0的连通分量数量任务二:求加多少条边能让整个图强连通对于第二问,因为要使整个图强连通,贪心的拿每一个出度为0的点对入度为0的点加边,这样下来最小的加边数就是max(入度,出度)#include <cstdio>#include <iostream>#include <alg原创 2020-06-10 18:10:16 · 386 阅读 · 0 评论 -
算法笔记:tarjan算法求强连通分量&割点&桥
强连通分量:其实就是个环割点:把这个点去掉可以使图不连通tarjan算法求强连通分量的思路:在dfs过程中有两个数组 low 和dfn 分别代表dfs中被搜索到的次序,以u为根的子树中的最小dfn。对于每一个点,如果它的dfn[u]==low[u]说明通过一条路径走回了自己,因为往后搜索的过程中dfn是在递增的,只有通过一个环走回去才可能使这两个值相等,所以就可以把这个环缩成点if(low[u]==dfn[u]){ t++;//连通分量的标号 do{ color[z[k]]=t;原创 2020-06-06 23:38:15 · 307 阅读 · 0 评论 -
算法笔记:Dinic最大流和SPFA费用流
先利用BFS对残余网络分层 一个节点的深度,就是源点到它最少要经过的边数。利用BFS对残余网络分层,分完层后,利用DFS从前一层向后一层反复寻找增广路。 这里写图片描述分完层后,从源点开始,用DFS从前一层向后一层反复寻找增广路(即要求DFS的每一步都必须要走到下一层的节点)。 因此,前面在分层时,只要进行到汇点的层次数被算出即可停止,因为按照该DFS的规则,和汇点同层或更下一层的节点,是不可能走到汇点的。DFS过程中,要是碰到了汇点,则说明找到了一条增广路径。此时要增加总流量的值,消减路径上各边的容原创 2020-06-06 23:11:48 · 950 阅读 · 0 评论 -
刷题记录 kuangbin带你飞专题六:最小生成树
全是憨批题的专题可能是为了在并查集之后给人恢复信心简略写一下1.POJ 1251 Jungle Roads模板题,把字母转化为数字#include <iostream>#include <cstring>#include <cstdio>#include <algorithm>#include <set>#include <queue>#include <vector>#include <cma原创 2020-05-28 12:00:53 · 341 阅读 · 0 评论 -
刷题记录 kuangbin带你飞专题四:最短路练习
写之前先给这个专题做个总结知识点:单源最短路,全源最短路,求最短路中的最长边,bellman ford算法求有负权的最短路,bellman or SPFA判断环,反向建图,差分约束,层次图建立层点(连通点)。应该是覆盖最短路所有内容了1.POJ 2387 Til the Cows Come Home模板题2.POJ 2253 FroggerFloyd模板题,只要看到这个数据范围冲就完事了(n<=800)3.POJ 1797 Heavy Transportation题意:求能到达终点的最原创 2020-05-22 18:33:25 · 532 阅读 · 0 评论 -
算法笔记-拓扑排序
每个杂物有一些先导杂物,直接嗯拓扑排序因为如果到最后一个杂物的时候可能有多条路线,可以同时进行,拓扑排序过程中把时间更新为到达此杂物的最大时间的就行了,比如#include<bits/stdc++.h>using namespace std;vector<int>a[10005];int t[10005];int s[10005];int n,m,c,k;...原创 2020-04-28 10:17:20 · 196 阅读 · 0 评论 -
Dijkstra
Dijkstra求最短路今天花了一天的时间开始学习图论的第一个算法dij,根据大佬们说的,没有负边权用dijkstra,有负边权用SPFA(死了?)or bellman-ford?用的链式前向星建图用优先队列(堆)优化之后复杂度大概是O(m*logn)模板题 洛谷P4779题目描述给定一个 nn 个点,mm 条有向边的带非负权图,请你计算从 ss 出发,到每个点的距离。数据保证你能从...原创 2020-01-27 21:53:37 · 305 阅读 · 0 评论