图论
文章平均质量分 68
左佥都御史
这个作者很懒,什么都没留下…
展开
-
hdu6165-tarjan&&多校9&&模板修正|XJB暴力-FFF at Valentine
http://acm.hdu.edu.cn/showproblem.php?pid=6165 坑啊,我以前的模板是树上的tarjan,没有延时标记,是用的dfn(搜索顺序数组)来搜索的。。所以第一个样例不对。。 然后我就感觉那么多人都过了,不应该是这个玩意,毕竟他比较冷门。。。 修正了 模板,还有就是这个题稍微麻烦一点,得重新见图缩点。 。。缩点后 拓扑我已经想到了(因为他要两者任意就行,我原创 2017-08-22 21:07:17 · 569 阅读 · 0 评论 -
Gym - 101490J-思维|网络流|匈牙利-Programming Tutors
https://vjudge.net/problem/Gym-101490J 写法好多。网络流和匈牙利也得补了。 给定2*m个点,问你求 1-m 为老师,m+1-2*m为学生。 给你他们的 二维坐标,让他们两两匹配,问你他们之间距离最大值的最小值。 思路:先以老师为主,存一张二维表,然后排和每个老师 和最近学生的距离,放到一个vector里,排序,这些距离从小到大找,把用过的学生标记掉。原创 2017-09-24 20:03:48 · 349 阅读 · 0 评论 -
poj3140-树型dp&搜索-Contestants Division
https://vjudge.net/problem/17374/origin 给定一个树,问你抛去一个边,两边点权和的差最小是多少。。 好像树的重心。。开始想着枚举一遍和 重心相近的点,后来一看我去直接 枚举点 的两颗子树不就行了。。 wawawa。。 于是乎 想了好久。。原来求 反树的时候,,我用的m- siz[u].. 而其实应该计算 一下所有学生人数的(这是带权的,而不是求点的数...原创 2017-09-06 15:51:33 · 223 阅读 · 0 评论 -
hdu3594-仙人掌图的判断&tarjan找环-Cactus
http://acm.hdu.edu.cn/showproblem.php?pid=3594 明确一点:一个scc并不一定是一个环,也可能是很多环。仙人掌图就是一个例子。 仙人掌图就是 每个环粘结起来,每条边只属于一个环。 有三个性质。 ① 没有横向边(具体可以看见百度文库那个讲解,https://wenku.baidu.com/view/ce296043192e45361066f575.h原创 2017-08-28 18:48:14 · 2001 阅读 · 0 评论 -
Codeforces Round #419 (Div. 2)-树形dp&依赖背包&-E. Karen and Supermarket
http://codeforces.com/contest/816/problem/E 给定一个物品的 原价格 和现价格,问你如何买能让他在有限花费内物品最多。存在制约关系,比如买3必须买1。 树形dp。设置两种状态,一种是父节点用了打折卡。一种是父亲没有用打折卡。父亲用了二者卡,儿子不一定要用打折卡。(比方说这个打折卡就便宜了一毛钱,而加上那一毛就可以再买一个东西了) ※ 关键是 对树形背包原创 2017-09-06 13:52:21 · 264 阅读 · 0 评论 -
hdu6181-启发式搜索A*|次短路模板|最短路枚举-Two Paths
acm.hdu.edu.cn/showproblem.php?pid=6181 我是用次短路板子做的。。初始化得多点不然得超时。 ①求次短路的思路是维护到达x点的最小距离和次小距离。(dij和spfa应该都可以,都做一下板子) ② 用A*,即启发式搜索,先求出F(X)即x点到目的点的代价,在求S(x),即初始点到x点的代价,然后找第k小的。用muliset或者优先队列都行,(multiset写原创 2017-08-28 12:39:42 · 419 阅读 · 0 评论 -
hdu6166-最短路&二进制枚举-Senior Pan
http://acm.hdu.edu.cn/showproblem.php?pid=6166 给定一个有向图,再给你一个集合。问这些集合中 两个点之间相互的最短路距离最小是多少。 思路:集合中每个数二进制都有一位不相同, 所以通过枚举二进制可以保证 包含了所有 两两枚举的情况。 然后dij的思路 就是通过 贪心+集合+有限的松弛操作 来搞事情的。 所以也可以计算集合之间的最短路,(学了一招原创 2017-09-05 17:28:39 · 274 阅读 · 0 评论 -
hdu2196-树形dp|树的直径-Computer
http://acm.hdu.edu.cn/showproblem.php?pid=2196 给定一个网络,是一个图,求每个节点到最远节点的距离。。 1 树的直径。 即树上的最长简单路(最长的一条线)。然后求出直径的两个端点, 在计算的时候记忆化一下,保存一下他们距离 端点的距离。然后取最远的。( 1 先求出距离一个端点的距离,用直径直接减去是不行的,,因为有的点并不在树的直径上。。原创 2017-08-23 10:24:48 · 284 阅读 · 0 评论 -
POJ3107-树的重心&树形DP-Godfather
https://vjudge.net/problem/POJ-3107 寻找一个点,删除之后,他的最大子树最小。其实就是树的重心。 如果有很多相同的,就按大小输出。 简单的树形DP应用。。求完所有树的重心之后处理,或者在dfs的过程中也能进行处理,都是可以的。 但那个要nlogn的排序,因为输出要顺序qwq#include <iostream>#include <stdio.h>#inc原创 2017-08-07 13:45:30 · 191 阅读 · 0 评论 -
POJ1655-树的重心&树形dp-Balancing Act
https://vjudge.net/problem/POJ-1655 给定m个点,和m-1个边,问你去掉一个点,使其最大子树最小,(即尽可能的平衡),输出那个点和最大的子树,如果有很多 点的最大子树 一样大, 那么就输出标号最小的。 这个带你就是树的重心啦hiahia 假设从1点开始dfs,在遍历黄色点的时候,子节点是两个红色的,得到的siz都是0,这俩点没有子树啊qwq,然后加1,所有原创 2017-08-07 13:18:43 · 261 阅读 · 0 评论 -
HDU6073-拓扑排序&搜索-Matching In Multiplication
http://acm.hdu.edu.cn/showproblem.php?pid=6073 给定一个二分图,左侧每个点都有两条边 求你他所有完美匹配 中各边之积的和。 1 先找右边只有一个边连接的,这种点肯定只有一种,并且这种关系会影响下一个,所以我们用topsort来弄,剩下的都是环了。 而对于环,若想完成完全匹配(顶点完全覆盖),则需要间隔的取边(画图发现qwq) 计算的过程是根据乘原创 2017-08-06 16:50:53 · 296 阅读 · 0 评论 -
hdu6141-多校8&最小树形图&朱刘算法-I am your Father!
http://acm.hdu.edu.cn/showproblem.php?pid=6141 比赛的时候根本没看那道题。 学习中。mark一下。 最小树形图 就是有向图的最小生成树。 一般用朱刘算法。 1 加入最小的边。如果存在孤立点,那么肯定不会有最小树形图。break 2 如果有 不包含root的环,对环进行缩点。 3 反复进行,直到没有环。 但这一道题还有不一样的地方原创 2017-08-18 18:52:29 · 339 阅读 · 0 评论 -
POJ1741-树的分治&树的重心&树上的路径问题-Tree
https://vjudge.net/problem/POJ-1741 给定一个树,问你他们之间距离小于等于k的点对有多少个 1 可以理解为二分这个树,最后到只有一个顶点时结束,为了让其尽可能的快,所以取重心, 2 取到一个重心后,每个点到重心的距离,用一个On的双向搜索计算小于等于k的点对。但是可能会存在没有过这个点的点对,所以把所有距离都加上和 重心邻接的边,去掉那些不经过 当前重心的点。原创 2017-08-18 16:39:44 · 282 阅读 · 0 评论 -
hdu6060-思维&搜索&好题-RXD and dividing
http://acm.hdu.edu.cn/showproblem.php?pid=6060 给定一个树,问你把除了1节点之外的节点 分成k份,然后让每一份和1节点 连接成 最小的斯坦纳树(最小生成树是一种特殊的斯坦纳树,所以斯坦纳树就是把所有的节点连通的树。),而图中已经是树了,所以其实就是把他们连接起来(就是题中对应的f函数,但是已经是树了所以不存在最小一说。。连起来只有一种情况啊)。问你最大原创 2017-08-02 13:31:28 · 355 阅读 · 0 评论 -
HDU6090-思维&构造&贪心&&2017多校5-Rikka with Graph
http://acm.hdu.edu.cn/showproblem.php?pid=6090 比赛的时候一直没想到,觉得应该是构造什么特殊的形式。 或者写出很多情况,然后推出一个什么公式qwq 给定m个点,n个边,问你构造一个图,令其每个点距离和(每一个距离算两次的意思)最短。1 当大于 m*(m-1) 时,是一个完全图,直接就行了 2 在m——-m*(m-1)的时候,其实是在一个轮图上加边原创 2017-08-08 22:00:28 · 204 阅读 · 0 评论 -
Gym - 101490E-最短路限制&二分&好题-Charles in Charge
https://vjudge.net/problem/Gym-101490E 给定一个图,问你求他的一条路。 比他的最短路 多du%(这是个阈值,只能少不能多。。酱紫), 然后最大化这条路中 最大的边。 以前是见过这个套路的。忘记在哪了,反正也是没a掉就对了qwq 二分极值。#include <bits/stdc++.h>using namespace std;/* 二分,最短路,原创 2017-09-25 12:45:35 · 380 阅读 · 0 评论 -
hdu6071-最短路&思维&多校4&同余-Lazy Running
http://acm.hdu.edu.cn/showproblem.php?pid=6071 给定四个点,构成一个矩形,和他们四个点两点之间的距离。 问你从2出发,再回到2,长度大于k的最短路。。 思路: 如果从2到达某点,再回到2不到,可以移动若干个2*m(m为2和临近点的距离)。个,来得到大于k的条件。 用dij算出到达i点并且mod 2*m为j的点。(这个最短路会一直执行,直到把这个原创 2017-09-02 09:35:04 · 243 阅读 · 0 评论 -
hdu6201-搜索|最长路-transaction transaction transaction
http://acm.hdu.edu.cn/showproblem.php?pid=6201 给定一个图,和某个点书的价格,你可以从某一点买书 在另一点卖,赚一个差价,但是旅途也是要钱的。问你最多赚多少钱。 dfs。#include<bits/stdc++.h>using namespace std;/* 先求以x为开始点的距离。 但是这样没有考虑子节点。在考虑一下子节点 树的直径也原创 2017-09-11 19:27:24 · 197 阅读 · 0 评论 -
贪心习题集
1vijos 1236 https://vijos.org/p/1236 给定一个字符串,设XXYY”,”XYXY”,”XYYX”,”XXXX,为四种词牌名,每个词牌名不能交叠,问你最多可以提取多少词牌名。 思路:我的思路就是没有思路,因为没有交叠,所以可以暴力从左往右这种。别忘记把他们给置-1。#include<iostream>using namespace std;...原创 2018-04-15 19:54:15 · 229 阅读 · 0 评论 -
vijos1027-spfa&关键路径-休息中的阿呆
https://vijos.org/p/1027 给定一个有向图,n个顶点,m个边。每个边有时间作为边权,问从1到n,最少花费多少时间可以把真个图都过一遍(把每个顶点都过一遍)。并且输出所有可能经过的点(用最少时间t走的所有可能经过的点) 思路:spfa改下方向就好了,把d数组改成无穷小,关键路径的输出我是用一个vector存的。当进行松弛操作的时候,如果成功就改。 两种输出关键路径的方法。...原创 2018-04-15 19:34:17 · 267 阅读 · 0 评论 -
bzoj1143-最小链覆盖&偏序集定理&二分图-祭祀river
http://www.lydsy.com/JudgeOnline/problem.php?id=1143 据说是南宁m题? 关键是问题的转化,然后就是一个板子。 最大反链覆盖->最小链覆盖。 链就是可以到达的点(任意两个,u可以到达v或者v可以到达u) 最小链覆盖->最小路径覆盖(可交叉) 另外。最近才发现的,二分图的求解往往是隐式拆点了。 看着没有拆,可是求解的过程 用的linker原创 2017-11-28 13:39:25 · 607 阅读 · 0 评论 -
51nod1649-二维最短路|(补图&最短路)-齐头并进
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1649 我觉得我这个方法已经是非常好了qwq。 后来百度了,别人的更好qwq 要不火车一步到达,要不汽车一步到达。 我们只需要判定一下谁先到达,然后对剩下的那几个求一下最短路,然后输出就可以了qwq 我的思路是,求一下二维最短路,一维是火车的,另一维是汽车的。(这原创 2017-12-15 18:06:29 · 241 阅读 · 0 评论 -
Codeforces Round #364 (Div. 1)-树的带权重心(模板)||贪心-Connecting Universities
http://codeforces.com/contest/700/problem/B 好题,真好题 PS :带权重心和重心的差别就是 重心是数量的重心,而带权的是根据每个点被赋予的不同的权重。像这道题那些没有大学的城市我们给他的权重是0! 给定你一个m个村庄。还有k个大学, 然后给你各个大学所在村庄的位置。 和m-1条各村庄之间的路线,将k各大学两两相连。 问你如何连接,能够让总路线原创 2017-08-07 17:37:33 · 2074 阅读 · 0 评论 -
poj2983-差分约束判定存在&正环与负环-Is the Information Reliable?
https://vjudge.net/problem/POJ-2983 给定一些坐标的位置,问你这些坐标的摆放是否合理。 ① P x y c,说明x再y左边c米处。 ② V x y 说明x在y 左边。 差分约束,大佬的博客。 http://blog.csdn.net/consciousman/article/details/53812818 (因为差分约束的距离都是根据不等式算的原创 2017-11-23 15:01:55 · 547 阅读 · 2 评论 -
Gym - 101498L-spfa判负环&暴力&好题&细节-L. The Shortest Path
http://codeforces.com/gym/101498/problem/L 给定一个图,很多负边。问你求他的权值最小的路径,因为一个点可以重复走多次,(注意题意,是成负环才可以重复走,如果不是的话,那么有一条负边就可以反复刷一万遍自然无穷大了qwq)。问你最小的路径, 如果有负环就是输出负无穷大。 当时没有好的思路。后来看了一个题解,暴力松弛n+1次, 如果可以松弛这么多次,那么一...原创 2017-11-17 14:41:29 · 714 阅读 · 8 评论 -
poj1422-最小路径覆盖(不交叉)&二分图-Air Raid
https://vjudge.net/problem/POJ-1422 给定一个图。点代表小城镇,边代表小城镇的路,你可以再一个点投一个伞兵,那个sb可以出发,经过任何他所经过的点,问你最少投多少伞兵。 要求①:伞兵不可以交叉。 思路① dfs?但是是有向图,不是求连通分量那种。 ② topsort也是不行的,因为只能求topsort并不能确定有分叉的情况。 ③ 正原创 2017-11-28 15:24:29 · 234 阅读 · 0 评论 -
51nod1640-最小生成树&二分|性质-天气晴朗的魔法
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1640 首先要求生成树的最大边最小,然后再要求生成树权值和最大。。 开始写了一个二分。。明显是没有理解krusal。 开始写的是这样。。 。。 每次生成的mst都是一样的。。(我边是从大到小的。。)如果只有最大的边可以二分成功,其他的都失败。。 想用上一次二分最...原创 2017-11-07 20:02:54 · 656 阅读 · 0 评论 -
计蒜客&景驰1024-二维最短路&模板-热爱工作的蒜蒜
https://nanti.jisuanke.com/t/18018 再最短路的过程中。 维护一个 dp[i][j] 表示从起点到达i,走了j个地下通道。(地下通道数目很少。) 边松弛边维护。 用dij和spfa都行。 (dij自己写的一直错。。。今晚心态炸了)#include <iostream>#include <vector>#include <cstdio>#include原创 2017-10-28 21:01:43 · 842 阅读 · 0 评论 -
hdu1530-回溯&最大团&菜鸟算法笔记-Maximum Clique
http://acm.split.hdu.edu.cn/showproblem.php?pid=1530 给一个图,问你你求最大团的大小。 可什么是最大团呢,就是最大的最大完全子图。就是图中能包含的最大的完全图。 思路:搜索回溯,枚举每个点为起点人,然后回溯,就是一个点一个点的试。可是酱紫老是tle,后来拿剪刀剪了一下枝,还是不行,真是郁闷。 看了一下题解。。原来是要从小到大枚举,因为最大团原创 2017-10-09 21:52:06 · 457 阅读 · 0 评论 -
hdu4123-树的直径+ST算法记忆化-Bob’s Race
http://acm.hdu.edu.cn/showproblem.php?pid=4123 给定一个树,问你i点到其他点的最远距离为num[i]。 问你num[i] 之间绝对值小于k的 连续区间是多少。。 思路:看懂题就好办了,先求一下所有点到其他点的最短距离(用树形dp求树的直径,这样比用dfs求方便一点)。然后把距离打到一个st算法里。 尺取法是看了别人的qwq。自己没写好,还有就是s原创 2017-10-05 19:32:16 · 209 阅读 · 0 评论 -
vijosP1070-次小生成树&两种写法-新年趣事之游戏
https://vijos.org/p/1070 中文题意。 次小生成树两种写法。 一种是用prim的写法,再prim的时候,维护max[i][j](i到j的路径中的最长边) 这一种是On2 另一种写法是用kruskal。把每条边给记录了。然后再存一个mst。 用dfs或者树上倍增 来这个数组,本质都是一样的。#include<cstdio>#include<cstring>#incl原创 2017-10-02 21:44:51 · 289 阅读 · 0 评论 -
hdu4081-次小生成树&MST变形&模板-Qin Shi Huang's National Road System
https://vjudge.net/problem/HDU-4081 给定你一个图,和每个点的坐标,问你建设n-1条路将它们链接起来后,可以减去其中一条边的花费,设其剩下的花费为B。而这条边对应的两个点的 点权大小为 A 要求A/B尽可能的大。。 思路: 这是用prim求次小生成树的方法。 维护path[][],作为表示i到在MST上的最长边。 并且 在一个最小生成树中,加一个原创 2017-10-02 20:07:59 · 171 阅读 · 0 评论 -
hdu4460-最短路&思维- Friend Chains
http://acm.hdu.edu.cn/showproblem.php?pid=4460 郁闷死,,开始用floyd写的,1e9左右。。 肯定超时,然后感觉暴力最短路这样 1e7了估计也够呛。 试一下是能写的。。暴力最短路。。 用了两种写法, 都是可以的。并且很像。#include <bits/stdc++.h>using namespace std;const int maxn=2原创 2017-09-21 16:07:37 · 331 阅读 · 0 评论 -
传递闭包-HDU1704
给你一些比赛关系,问你有哪些关系不能确定#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>using namespace std;const int maxn=502;int main(){ int t;int m,n;int a,b; int g[maxn][maxn];原创 2017-06-03 22:10:15 · 238 阅读 · 0 评论 -
HDU5137-最短路最大化-How Many Maos Does the Guanxi Worth
https://vjudge.net/contest/174794#problem/K 一个图 m个点 n个边, 可以删除一个点(与之连接的边也删除),令其之后的最短路最大,问你最短路长度是多少。 如果删除一个就不能连通了那就输出Inf(第一个字母大写的,,因为这个wa了6次。。) 开始的想法是 枚举删除的点,求最短路,因为想另其最大,我们就求取最大的就行,如果最大都是 dis的初始值,则说原创 2017-07-30 21:51:22 · 304 阅读 · 0 评论 -
HDU2544-最短路(dij堆优化与spfa)
赤裸裸的模板题。。 如果没有负边就用dij的堆优化 否则的话就用spfa#include <iostream>#include <cstdio>#include <cstdlib>#include <queue>using namespace std;/* dijkstra*/const int maxn=1000*2;struct Node{ int v; int原创 2017-05-29 20:00:14 · 277 阅读 · 0 评论 -
双bfs求树的直径
题目https://vjudge.net/problem/HDU-4607 给定一个图,点是景点,有n-1(n是景点数)的路径(这是树形的) 在给k组数,每一个数为想游览的景点数s,问最短距离是多少。 方法:求树的直径,如果小于s,那么超过的点要过两次。 这个相当于推得公式。 当然还有其他方法。#include <bits/stdc++.h>using namespace std;/*原创 2017-04-24 21:29:02 · 629 阅读 · 0 评论 -
hdu4607双dfs求树的直径+公式
代码如下#include <iostream>#include <cstdio>#include <cstdlib>#include <bits/stdc++.h>using namespace std;/*这是我写的求树的直径的最后一种方法,写完我就去玩树形dp了。祝福我吧。省赛也即将来临,东北赛也如期而至,希望自己可以打得更好。以最短的时间复习功课,争取不挂科就行。以效率来抢时原创 2017-04-27 18:05:51 · 422 阅读 · 0 评论 -
spfa求树的直径
前言:本来想写在一个博文里的。 但是太麻烦了。并且dp还没怎么看懂。 还是要努力啊。 再写一下dfs求树的直径就完事了。; 方法:我感觉spfa在这里面和bfs几乎差不多,唯一的差别就是松弛除了赋初值就没啥用了。#include <iostream>#include <bits/stdc++.h>/*这道题写废了我也很痛心啊,怎么spfa又忘记了啊。今天晚上targin肯定可以搞定。原创 2017-04-27 16:54:51 · 334 阅读 · 0 评论 -
poj2186——双dfs求强连通分量
挑战程序设计原题。 感觉这个方法容易理解。 第一次dfs,先用一个时间戳来标记一下(时间戳就是寻访完这个店结束的时间),不是遍历的时间, 我们可以保证的是 最开始的点 时间戳最大。 然后 根据时间戳,从大到小进行第二次dfs(把图反向) 就可以得到k。 这个方法容易理解。 并且可以练习dfs。。。#include <cstdio>#include <vector>#include原创 2017-04-27 16:18:43 · 657 阅读 · 0 评论