Processing math: 100%
/* 返回顶部 */

随笔分类 -  图论

摘要:传送门>> 给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 这个算法叫..WQS二分/带权二分/DP凸优化 用来解决一种特定类型的问题: 有n个物品,选择每一个都会有相应的费用,需要求出强制选need个物品时的最大/最小费用。 适用范围:设f(x) 阅读全文
posted @ 2019-06-09 11:37 Mogeko 阅读(107) 评论(0) 推荐(0) 编辑
摘要:暴风城 没想到INF爆int卡了我一个月... 求收取费用最多的一次的最小值,显然是要用二分答案。 二分这个最大费用,每次用dijkstra求一下不经过收取费用大于二分值的城市的前提下的最短路, 并判断这个距离是否在血量范围内。 代码如下 #include<cstdio> #include<iost 阅读全文
posted @ 2019-05-31 01:02 Mogeko 阅读(149) 评论(0) 推荐(0) 编辑
摘要:Luogu P4716 【模板】最小树形图 最小树形图就是在有向图上,以某一点作为根的一棵最小生成树。 这个算法是基于贪心和缩点的思想。 步骤: (1)先求出最短弧集合E0(图上所有点的边权最小的入边的集合); (2)如果E0不存在,则图的最小树形图也不存在,跳出循环; (3)如果E0存在且不具有环 阅读全文
posted @ 2019-05-31 00:21 Mogeko 阅读(344) 评论(1) 推荐(0) 编辑
摘要:传送门 求一棵生成树,使它的最大边权与最小边权之差最小。 假设已经求出了一棵最小生成树,它的最小边权一定是图上所有边中最小的;它的最大边也应该是相对最小的。 也就是说,不改变当前最小边,它的边权差只能变大,答案不可能变得更优了。 那么想要答案更新,只可能是最小边变大,最大边也变大。 那么删去最小边, 阅读全文
posted @ 2019-05-28 19:46 Mogeko 阅读(215) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题的正解贪心思路我看了题解.... 给出点对的先后次序,很容易想到拓扑排序。 但是如果按字典序排序,就会遇到较小的就放在前面, 可以举出反例:4种菜肴,限制为<2,4><3,1>, 那么字典序最小的是2,3,1,4,但正解应为3,1,2,4. 因为按字典序排序只能按前一个点排,不能知道后 阅读全文
posted @ 2019-05-28 02:53 Mogeko 阅读(115) 评论(0) 推荐(0) 编辑
摘要:传送门 在图上进行一次买,一次卖,使最后的获利最大。 可以看出,在一个节点x上,有两种选择:不买卖;买(当前没买)或卖(当前买了)。 把没买的状态记为状态x1,买了记为状态x2,买完又卖了记为状态x3。 在每个点上,可以由x1转到x2,x2转到x3,并且操作是一次性的。 考虑分层最短路,dis[x] 阅读全文
posted @ 2019-05-27 23:59 Mogeko 阅读(125) 评论(0) 推荐(0) 编辑
摘要:传送门 求一棵最小生成树,要求:忽略树上s-1条边的边权后,最大的边最小。 (因为卫星频道是两两互达的,所以想把连接两个联通块之间的边权忽略必须用两个联通块都放置卫星频道。也就是至少要两个) emmm...其实我本来想的是分层最短路那种动态规划,记录用了几次忽略机会。 假设已经求出答案最小生成树,忽 阅读全文
posted @ 2019-05-23 20:15 Mogeko 阅读(118) 评论(0) 推荐(0) 编辑
摘要:传送门 要使n个农场从其他农场引水,或自己打井。 对于每个农场,最小花费为与min(自己打井,min(与其他农场连接)); 当然,至少有一个农场打井。 这样选择后,得到了若干个联通块,每个块中有一个农场打井。 那么可以看出,每个农场需要直接或间接与水源相连。 把水源看作一个中转节点(虚根),每个农场 阅读全文
posted @ 2019-05-23 19:52 Mogeko 阅读(139) 评论(0) 推荐(0) 编辑
摘要:传送 分层最短路。 可以发现,需要做出选择的地方只有地铁站,所以点集就是所有地铁站。 所有相同x坐标地铁站之间纵向连边,点编号1~n,y相同地铁站之间纵向连边,编号n+1~2n, 边权为x或y坐标差值*2。 在每个地铁站可以选择换乘或者不换乘,如果换乘,花费为1,坐标由i变成i+n(或i-n)。 所 阅读全文
posted @ 2019-05-22 14:55 Mogeko 阅读(196) 评论(0) 推荐(0) 编辑
摘要:传送 gg给的题解 这道题的k很小,把k看作一种状态,可以考虑用分层的方法解决。 把每个点分成k个,dis[x][k] 代表使用了k次免费机会,到达x的最短距离。 从u到v,可以不使用免费机会,费用为val,或者使用免费机会,边权为0。 那么连边的时候,每条边实际要连2*(k+1)条:(i = 0~ 阅读全文
posted @ 2019-05-21 20:34 Mogeko 阅读(171) 评论(0) 推荐(0) 编辑
摘要:前往>>暴风城 第一次写SPFA!(惭愧 对于某个怪兽,杀死它的最小消耗 = min(它的魔法消耗,它的物理消耗 + 杀死它所有儿子的消耗) 可以看出,一个点可能被它的儿子更新,并且可能去更新它的父亲。 考虑用最短路解决这道题,从一个假设的起点0出发,要求它到1的最短距离。1~n每个点的距离初始应为 阅读全文
posted @ 2019-05-16 20:17 Mogeko 阅读(184) 评论(0) 推荐(0) 编辑
摘要:(他羊) Tarjan是一种dfs算法。 有向图的强联通分量 如果一个有向图的子图中,任意两点可以相互到达,那么这就组成了一个强联通分量。 在Tarjan算法中,需要维护一个栈stk, 每个节点有两个值:dfn[],即dfs序;low[],表示这个节点最多经过一条横叉边能到达的dfn最小的点的dfn 阅读全文
posted @ 2019-05-04 17:07 Mogeko 阅读(215) 评论(0) 推荐(0) 编辑
摘要:qwq 拓扑排序模板题。 拓扑排序,是在一个DAG中,其拓扑排序为其所有结点的一个线性排序(答案不唯一)。 该排序满足这样的条件——对于图中的任意两个结点uv,若存在一条有向边从u指向v,则在拓扑排序中u一定出现在v前面。 就好比一张流程图,必须完成这一步之前的所有步骤 阅读全文
posted @ 2019-04-28 20:37 Mogeko 阅读(213) 评论(1) 推荐(1) 编辑
摘要:传送门 可以发现,最短路一定要经过墙壁的断点。 那么把房间看作一个有向图,墙壁的断点为节点,求从起点到终点的最短路。 这道题的难点在于建图。枚举所有的断点,若可以走则加入这条边。 判断两点是否连通,即为判断两点之间是否有其他墙壁阻隔。 两点的连线可以看作一个一次函数y=kx+B, $k=(x2- 阅读全文
posted @ 2019-04-17 18:02 Mogeko 阅读(458) 评论(0) 推荐(0) 编辑
摘要:qwq 这题是知道了正解做法才写的.. 求每两点间最小权值最大的路径,本来我以为要每个点都跑一遍dij(?),后来意识到生成树好像是用来找这个的( ´▽`) 然后我问dtxdalao对不对,他说“我记得这道题好像要用倍增”(我:???剧透会被关进小黑屋的) 其实就是最大生成树是随便建的,然后对于每两 阅读全文
posted @ 2019-02-07 09:00 Mogeko 阅读(130) 评论(0) 推荐(0) 编辑
摘要:传送门 这道题一眼看上去...Floyd..? 每个村庄修复时间、询问都是不下降的...似乎连排序都省略了x 既然这样,那每次询问时,更新这个询问之前的村庄来求目前的最短路径就可以了 注意事项:对于这个循环 1.k不能定义为for内部的局部变量(因为之前的村庄已经遍历过了不需要再走一遍) (否则时间 阅读全文
posted @ 2018-12-04 13:23 Mogeko 阅读(129) 评论(0) 推荐(0) 编辑
摘要:qwq dij其实和prim挺像的,prim是找权值最小点,dij是找边, 用一个优先队列就可以在加入边的时候直接排序,避免了每次遍历更新min priority_queue <pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > 阅读全文
posted @ 2018-11-30 22:00 Mogeko 阅读(222) 评论(1) 推荐(0) 编辑
摘要:qwq kruskal算法 按边权从小到大排序,并查集合并即可。 #include<cstdio> #include<algorithm> using namespace std; int fa[200005]; int n,m; struct abc { int from,to,w; } q[ 阅读全文
posted @ 2018-11-22 16:50 Mogeko 阅读(145) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示