![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
什么都不会的菜鸡
这个作者很懒,什么都没留下…
展开
-
树上启发式合并【学习博客例题】
学习博客例题:牛客练习赛:DongDong数颜色代码:#include<bits/stdc++.h>#define lson sign << 1, l, mid#define rson sign << 1 | 1, mid + 1, r#define lowbit(x) (x&(-x))typedef long long ll;...原创 2019-10-10 20:16:16 · 321 阅读 · 0 评论 -
POJ 3728 The merchant 【在线LCA+细节】
传送门题意:一个国家有N个城市,每对城市之间只有一条简单的道路。商人选择了一些道路,并希望在每条道路上赚尽可能多的钱。当他沿着一条道路移动时,他可以选择一个城市购买一些商品,然后在一个城市中出售。所有城市的商品都一样,但价格不同。现在,您的任务是计算每条路径上可能的最大利润。解析:这道题可以用离线LCA+DP解决,也可以用在线LCA+ RMQ。我用的第二种方法,这道题主要是利用gran...原创 2019-03-28 22:02:15 · 141 阅读 · 0 评论 -
计蒜客 青出于蓝胜于蓝 【DFS序 + 树状数组】
传送门题意 :看了题面好久,还是画了一个图才理解,意思就是根的排名为p,告诉你 n - 1 个关系,告诉你排名 ui 和 vi 是存在师徒关系。思路:题目上给的就是排名就是 1- n ,还不用离散化,直接 dfs +树状数组 ,记录一个dfs前的状态和dfs后的状态,两个状态的差值就是答案。附上代码:///#include<bits/stdc++.h>///#inc...原创 2019-04-02 12:41:28 · 177 阅读 · 0 评论 -
牛客小白月赛9 树上求和【树链剖分模板】
传送门题目描述:给你一棵根为1的有N个节点的树,以及Q次操作。每次操作诸如:1 x y:将节点x所在的子树的所有节点的权值加上y2 x:询问x所在子树的所有节点的权值的平方和,答案模23333后输出输入描述:第一行两个整数N,Q第二行N个整数,第i个表示节点i的初始权值接下来N-1行每行两个整数u,v,表示u和v之间存在一条树边接下来Q行每行一个操作,格式如题目描述输出描述...原创 2019-04-02 10:16:41 · 268 阅读 · 0 评论 -
POJ3417 Network【LCA+树上差分】
传送门DescriptionYixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has just received a bad news which denotes that DxtNetwork(DN), the SN's business rival, ...原创 2019-03-28 15:39:33 · 225 阅读 · 0 评论 -
DFS序学习+例题
什么是DFS序?DFS序就是指一棵树被DFS时所经过的节点的顺序DFS序就是将树形结构转化为线性结构,用DFS遍历一遍这棵树,进入到x节点有一个in时间戳,递归退出时有一个out时间戳,x节点的两个时间戳之间遍历到的点,就是根为x的子树的所有节点。时间戳时间戳记录第一次开始访问这个点的时间和和最后结束访问的时间void dfs(int s,int pre){...原创 2019-03-27 20:15:16 · 505 阅读 · 0 评论 -
树链剖分【学习 + 洛谷P3384】
树链剖分LCA: Nearest Common Ancestors 【POJ1330】求树上两个结点的最近公共祖先(LCA)树上差分: Network【POJ 3417】DFS序:Apple Tree【POJ 3321】要求要求你进行上述五种操作,并且将询问输出,用上面两种算法来解决就比较吃力这就要靠树链剖分来解决了参考博客:https://www.cnblo...原创 2019-03-31 18:47:10 · 205 阅读 · 0 评论 -
POJ 3694 Network【Tanjan+LCA+并查集】
题目链接题目描述网络管理员管理大型网络。该网络由N台计算机和成对计算机之间的M链路组成。任何一对计算机都通过连续的链接直接或间接连接,因此可以在任何两台计算机之间转换数据。管理员发现某些链接对网络至关重要,因为任何一个链接的故障都可能导致某些计算机之间无法转换数据。他把这种联系称为桥梁。他计划逐一添加一些新链接以消除所有桥梁。 您将通过在添加每个新链接后报告网络中的网桥数来帮助管理员。输...原创 2019-03-26 20:32:46 · 206 阅读 · 0 评论 -
CodeForces - 1051F 【LCA + 最短路】
传送门大概题意给你一个包含n个点m条无向边的图,多次询问最短路(保证每两个点都连通,m - n ≤ 20 )思路我们要注意题面上给你的条件(m - n ≤ 20),这是一个很重要的信息。我们知道含有n个结点的树包含 n - 1 条边,这道题相当于在树上又多加了几条边。如果给我们一棵树,多次询问最短路那么答案等于 dis[ s ] + dis [ e ] - 2 * dis[ lca (...原创 2019-03-30 16:31:59 · 378 阅读 · 0 评论 -
HDU - 3830 Checkers【思维+LCA】
传送门 Problem Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wants to make the chessboard much bigger. Although Little Z insists the original v...原创 2019-03-29 19:31:57 · 150 阅读 · 0 评论 -
图的割点学习+模板题【Tarjan】
什么叫做割点?在一个无向图中,如果有一个顶点集合,删除这个顶点集合以及这个集合中所有顶点相关联的边以后,图的连通分量增多,就称这个点集为割点集合。 图中c就是一个割点,剩下{A,B}和{C,D}两个连通分量实现原理:在学习割点的基础上应该了解什么是连通分量和Tanjan的实现过程。求割点的过程主要是在Tarjan模板中加了一些判断。Tarjan的过程主要就是DFS...原创 2019-03-22 16:57:32 · 391 阅读 · 2 评论 -
505B - Mr. Kitayuta's Colorful Graph 【并查集】
传送门题意:给你m条无向边,两个端点之间有一个颜色c,询问两点之间有几条用同种颜色连接的道路。方法:①:最开始我的想法是Floyd,用maps[i][j][k]三维数组表示从 i 到 j 是否能够通过 k 颜色连接。(复杂度为(n^3*m+q*m)居然还过了,难道因为跑的是纯循环嘛。。。)②:利用并查集来进行合并,我们开二维数组p[i][j]来表示,点 i 用颜色 j 的祖先是谁。...原创 2019-03-13 20:38:56 · 160 阅读 · 0 评论 -
【2-SAT初学+模板题讲解】POJ3683 Priest John's Busiest Day
什么是2-SAT?SAT是适定性(Satisfiability)问题的简称 。一般形式为k-适定性问题,简称 k-SAT。可以证明,当k>2时,k-SAT是NP完全的。因此一般讨论的是k=2的情况,即2-SAT问题。我们通俗的说,就是给你n个变量ai,每个变量能且只能取0/1的值。同时给出若干条件,形式诸如(not)ai opt (not)aj=0/1其中opt表示and,o...原创 2019-03-21 20:31:53 · 135 阅读 · 0 评论 -
Power OJ 2853 小Z的糖果店【树的中心+DP+优先队列】
传送门思路:要求找一个最小Gg值,当 K = 1 时,我们知道这个点一定在直径上面,要使 Gg 最小,则该点到直径的两个端点距离的最大值最小。DFS求直径:随意找一个点为起点,距离这个点最远的点就是直径的一个端点S,然后在以S为起点DFS,距离S距离最远的点就是直径的另一个端点E。我们要记录一个结点的dp值 dp [ i ] 表示以 i 为根结点的子树上的所有结点距离 father[ i...原创 2019-04-20 20:15:40 · 142 阅读 · 0 评论 -
Chino with Rewrite 【树链剖分+并查集+状压线段树】
传送门中文题面就不在阐述解题思路:题目上的操作2 对一棵树的一条链进行操作,很容易想到树链剖分。由操作1给的叙述,我们能够想到并查集离线建树。要求一个链上知识点种类的数量,而且 wi 不超过60,利用状压来解决。///#include<bits/stdc++.h>///#include<unordered_maps>///#include<un...原创 2019-04-21 19:11:53 · 226 阅读 · 0 评论 -
树上最近点对【最短路】
题意:给定一棵n个点(点编号为 1,2,⋯,n) 的树,标记出k个不同的点 s1,s2,⋯,sk,对于每个 si求出剩下的标记点中哪个离 si最近,输出距离。注意:这不是一个满分做法,复杂度 O(nlog(n)) ,树形dp复杂度可以达到 O(n)。解析:新建一个点向所有标记点连一条权值为 0 的边,并作为源点跑 Dijkstra ,可以求出离点 u 最 近的标记点 f...原创 2019-10-08 20:44:30 · 477 阅读 · 0 评论 -
Balance of the Force 【二分图+枚举】
传送们废话:队友告诉我题意后,我第一反应是二分答案+2-sat,问了下数据范围2e5....,芽儿呦边都建不了。。。。训练赛过程中也没有把这道题A掉,队友其实已经想到了解法的一部分。解题思路:首先我们肯定得判断答案是否有解,即对冲突条件建边,然后判断是否为二分图。如果有解:对于每一个连通块来讲,存在两种方案分配(因为存在冲突条件限制),但是两种方案不能同时选择,答案要求我们选择方案中极差...原创 2019-09-25 17:41:48 · 252 阅读 · 0 评论 -
P4197 Peaks 【Kruskal重构树】
传送门Kruskal重构树的基本应用吧,可以拿来当一个模板用,需要注意的是需要开双倍空间(被RE到死。。。),需要按题目需要对边进行排序。代码:#include<bits/stdc++.h>#define lson sign << 1, l, mid#define rson sign << 1 | 1, mid + 1, r#define l...原创 2019-09-23 21:52:02 · 225 阅读 · 0 评论 -
2019 HDU 多校二
1002Beauty Of Unimodal SequenceLIS+贪心:up[i][0] 表示以 i 结尾的最长严格上升序列的最长长度;up[i][1] 表示以 i 结尾的单峰最长的最长长度;down[i][0] 表示以 i 开头的最长严格下降序列的最长长度;down[i][1] 表示以 i 开头的单峰最长的最长长度;上面的四个数组我们可以用线段树很容易就可以维护出来,然...原创 2019-07-25 14:13:38 · 198 阅读 · 2 评论 -
第K小团
技巧:利用优先队列找出第K小团,然后用 bitset 来存图,可以利用其自带函数直接判断是否可以新增点。代码:#include<bits/stdc++.h>using namespace std;typedef long long ll;const int maxn = 105;int n, k;ll w[maxn], c;bitset<maxn> m...原创 2019-07-24 10:01:43 · 244 阅读 · 0 评论 -
Floyd算法(多源最短路)
Floyd如果你有挑战程序设计竞赛第二版(群文件里面有PDF版本),你可以看P103讲解的很好。如果要用到 Floyd 算法建边方式基本都是邻接矩阵,因为时间复杂度为O(n^3),所以说n通常都不会很大。Floyd 可以求解多源最短路,传递闭包(POJ3660),求最小环。代码:#include<bits/stdc++.h>using namespace st...原创 2019-07-14 10:56:17 · 294 阅读 · 0 评论 -
邻接表(链式向前星)
邻接表(链式向前星)链式向前星:用来储存边的信息的以中方法。优点:速度快,节省空间,很常用如果我们用 Vector 来建边,相当于开的是一个动态的二维数组,较数组模拟来说比较慢。有时候还卡空间(被某一道题卡崩的YMF学长:我再用Vector建边我是原创 2019-07-14 10:25:26 · 906 阅读 · 5 评论 -
Power OJ 2478: 最短路问题
传送门题意:求最短路,多了一个约束条件,可以将一条边的花费变为0或者两条相连的边的花费都变为0。废话:很早在OJ上看到的题,当时不会做,现在终于可以把这道题干掉了(结果自己疯狂WA,居然是多组输入!!!!!)解题思路:表示三种状态表示还没有使用过免费边表示还可以接着上一条边再使用一次免费边已经把免费边用光了代码:///#include<bits/stdc++.h>/...原创 2019-05-12 21:05:50 · 146 阅读 · 0 评论 -
西北大学:西湖奇遇记Ⅰ【最短路】
传送门看代码更容易理解///#include<bits/stdc++.h>///#include<unordered_map>///#include<unordered_set>#include<iostream>#include<cstring>#include<cmath>#include<qu...原创 2019-05-12 19:32:40 · 191 阅读 · 0 评论 -
P4014 分配问题 【网络流24题 最小/大费用最大流】
传送门废话:应该是一道最大流最小费用流的模板题解题思路:在保证每个人都有工作的条件下获得的收益最大和最小。收益最小:费用流模板。收益最大:将收益取反,跑一遍板子,答案就等于最小费用取反。一个超级源点 - > 每一个人 (流上限均为1,费用为0)人->工作 (流上限为1,费用(最小收益为 Cij,最大收益为 -Cij ))工作->超级汇点(流上限为1,费用为0)代码:...原创 2019-05-21 17:49:28 · 1720 阅读 · 2 评论 -
[SDOI2013] 森林【可持久化线段树+启发式合并+LCA】
传送门吐槽:题目上给的testcase 太迷惑人了。。。题目描述:小Z有一片森林,含有N个节点,每个节点上都有一个非负整数作为权值。初始的时候,森林中有M条边。小Z希望执行T个操作,操作有两类:Q x y k查询点x到点y路径上所有的权值中,第k小的权值是多少。此操作保证点x和点y连通,同时这两个节点的路径上至少有k个点。 L x y在点x和点y之间连接一条边。保证完成此...原创 2019-05-07 12:46:16 · 133 阅读 · 0 评论 -
Power OJ 2854 小Z的糖果难题 【单调栈+倍增】
传送门中文题目就不在阐述题意比赛时我们用分块来解决的,但是T掉了。。。思路:我们使用单调栈维护的每个点可以跳跃到的下一个点,相当于两个点之间可以建一条边(如果不存在下一个点,可以和一个虚拟根结点建边),最后利用倍增求LCA的思想将L,不断向上跳跃,直到不能继续时,当前位置就是最后的位置,两个位置的深度差值就是答案。///还有一种解法值 单调栈+树状数组+离线代码:///#incl...原创 2019-04-18 14:35:44 · 207 阅读 · 0 评论 -
POJ 1419 【最大团模板解析】
传送门题目描述(中文)由于一个小小的失误,你的电脑被“WannaCry”病毒袭击了,所有文件都被加密了,不过作为一只ACM大佬,你只用了7天就分解了病毒的RSA4096公钥,计算出了病毒的私钥并成功解密了文件,但你错过了这7天的Codeforces比赛,这导致你的排名下降了,你十分生气,决定写一个更加强大的“WannaCry”来报复社会,于是,又花了7天的时间,你完成了你的加强版“WannaC...原创 2019-03-17 17:30:01 · 270 阅读 · 0 评论 -
Jamie's Contact Groups HDU - 1669 【二分图多重匹配】
传送门题意:Jamie有很多联系人,但是很不方便管理,他想把这些联系人分成组,已知这些联系人可以被分到哪个组中去,而且要求每个组的联系人上限最小,即有一整数k,使每个组的联系人数都不大于k,问这个k最小是多少?思路:就是一道多重匹配模板题,我们需要二分答案,然后利用匈牙利算法的思想,来寻找是否存在增广路径附上代码:///#include<bits/stdc++.h>...原创 2019-03-07 19:58:38 · 665 阅读 · 0 评论 -
A and B and Lecture Rooms CodeForces 519E 【LCA】
传送门Description在大学里,小A和小B是一对非常要好的朋友,他们经常一起参加比赛。现在,这个大学里有n个教室,这n个教室用n-1个走廊相互连接,因此学生可以从一个教室经过走廊走到任何其他的教室。每天,小A和小B都要讨论一些问题。每次下课以后(小A和小B在不同的地方上课),小A和小B就相约去同一个教室讨论问题。小A和小B希望讨论的教室离他们现在各自所在的教室距离相等。两个教...原创 2019-02-28 15:32:32 · 128 阅读 · 0 评论 -
POJ 3160 Father Christmas flymouse 【Tanjar缩点 + dfs】
传送门 题意:给你一个有向图,找寻一条路径使得经过的权值和最大(点可以重复经过,但是权值只加一次,点上的权值可加可不加)。思路:用tanjar缩点将图转化为DAG,在tanjar缩点过程中记录一个强连通分量中正权值和,然后再跑一边记忆化dfs即可。///#include<bits/stdc++.h>///#include<unordered_map>/...原创 2019-02-23 19:35:17 · 81 阅读 · 0 评论 -
强连通图的算法【Tarjan】+ 【HDU1269】 迷宫城堡
参考博客:https://blog.csdn.net/justlovetao/article/details/6673602 https://blog.csdn.net/qq_16234613/article/details/77431043 (代码含有注释)问题:for(int i=head[s]; i!=-1; i=edge[i].p){...原创 2019-02-23 17:19:48 · 152 阅读 · 0 评论 -
POJ 2763 Housewife Wind 【LCA】
传送门DescriptionAfter their royal wedding, Jiajia and Wind hid away in XX Village, to enjoy their ordinary happy life. People in XX Village lived in beautiful huts. There are some pairs of huts conn...原创 2019-02-27 19:12:12 · 159 阅读 · 0 评论 -
Hdu 1350 Taxi Cab Scheme【最小边覆盖】
二分图:最小顶点覆盖=最大匹配最小边覆盖=顶点数-最小顶点覆盖(最大匹配)最小边覆盖:实质是个边集,这个集合里的边能覆盖所有的点,最小边覆盖是满足这个要求的所有边集中边数最少的一个。这里顶点数等于总的顶点数,是二分图两边的顶点数,不是一边。证明:设最大匹配数为m,总顶点数为n。为了使边数最少,又因为一条边最多能干掉两个点,所以尽量用边干掉两个点。也就是取有匹配的那些边,当然这些边是越...原创 2019-02-16 21:58:26 · 190 阅读 · 0 评论 -
dij优化
普通的Dijkstra算法复杂度为n平方,当数据量稍大时就会超时,所以诞生了时间复杂度为nlogn的优先队列优化的Dijkstra算法。原来版本有大量时间浪费在通过邻接矩阵找边和搜索当前最短路径中,而优化后的算法中,用结构体Edge存储边信息,省却了找有效边的麻烦。而且采用优先队列,可以快速找到最短路径,又省却一部分时间,所以在时间上具有极强的优越性。贴一份代码,看输入部分代码相信应该可以看...转载 2018-07-22 11:22:35 · 2112 阅读 · 0 评论 -
二分图
关于最大匹配,最小点覆盖,最少路径覆盖和最大独立集的总结(1)二分图的最大匹配匈牙利算法(2)二分图的最小点覆盖二分图的最小点覆盖=二分图的最大匹配求最小点覆盖:从右边所有没有匹配过的点出发,按照增广路的“交替出现”的要求DFS。最终右边没有访问过的点和左边访问过的点组成最小点覆盖。证明见这里(3)二分图的最少边覆盖二分图的最少边覆盖=点数-二分图的最大匹配证明...转载 2018-08-06 16:29:45 · 121 阅读 · 0 评论 -
【HDU - 1598】 find the most comfortable road
题目链接:传送门题目是一道中文题目,大概题意:给一些双向边,多次询问从起点s,到终点e,(权值max-权值min)的最小值。本题的正确做法:并查集+思维 (暴力求解,不会超时) ///并不是最小生成树做法:题目求最小值与最大值的差值最小,我们可以将权值从小到大排序,然后枚举最小值,然后往下开始用并查集,如果起点s和终点e在同一棵树上了,那么当前的权值和最小值来更新答案,如...原创 2018-11-04 11:46:44 · 211 阅读 · 0 评论 -
【HDU 1811】 Rank of Tetris 并查集+拓扑
题目链接:传送门中文题目就不阐述题意了,我最开始的想法是种类并查集,但是细想一下,发现并不可行,因为题目没有告诉有多少类型。做法:关键问题是处理等号的两个点,其实两个点相等,就相当于这两个人的排名是一样的,我们用并查集搞定这么些个相等排名的点,之后把有全序关系的点入度入图,然后拓扑排序走一发,如果到最后所有点的度都变成了0,那么这个图就满足OK的条件,否则属于冲突。如果最后所有点的度都变成...原创 2018-11-05 16:53:59 · 92 阅读 · 0 评论 -
Minimal Ratio Tree HDU 2489
题目链接:传送门 题意:给你一个有n个节点的完全双向图,在这张图中找有m个结点的数,使表达式的值最小,并将节点按照字典序输出。 做法:看到表达式第一想法是最优比例生成树,但是找不到排序的条件,就换一种方法,题目上给的数据很小,可以尝试着暴力一下,题目按照节点字典序输出,我们可以深搜节点,然后将节点和节点的边取出来,然后用 Kruskal 解决最小生成树,最后更新答案。 代码...原创 2018-11-15 13:20:28 · 154 阅读 · 1 评论 -
匈牙利算法,KM算法
匈牙利算法 博客原址:https://blog.csdn.net/dark_scope/article/details/8880547KM算法 博客地址:http://www.cnblogs.com/wenruo/p/5264235.html 匈牙利模板:bool find(int x){ int i,j; for (j=1;j<=m;j++){ //扫...转载 2018-11-29 19:24:09 · 229 阅读 · 1 评论