![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
whoammiiiiii
这个作者很懒,什么都没留下…
展开
-
cf 1076D 堆优化dij性质
题意:给你一个n个点m条边的无向图,定义如果1号点到 i 号点的距离是原图的最短距离就是好点,现在让你最后最多只能剩k条边,同时让好点的个数最多,问你剩的是哪k条边,输出边个数和剩下的边的编号。思路:首先明确如果剩k条边,同时要好点最多,那么就有min(k+1,n)这么多个好点(包括点1),因为一条边就可以制造一个好点,所以接下来就利用堆优化dij的性质,在队首的那个点一定已经是最短路了,无法被松弛,所以只要dij里面松弛的时候记录一下之前的那条边的编号,直到pop了min(k+1,n)个点就brea原创 2020-12-29 14:45:04 · 153 阅读 · 0 评论 -
hdu 3416 Marriage Match IV (问图中最多有多少条从a到b互不相关的路径(i.e. 一条路不能走两次)(限制:路径要最短) 最短路+最大流)
题目链接淦!看了3个小时原来是自己定义的宏定义坑了自己!我的宏定义ms(a,0)就是memeset(a, 0, sizeof(a)),然后在函数内传入指针p,然后ms(p, 0),memset的定义 : void *memset(void *str, int c, size_t n) 复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。所以我ms(p, 0)并不是把...原创 2020-05-01 04:07:24 · 285 阅读 · 0 评论 -
hdu 4725 The Shortest Path in Nya Graph (加虚拟点建图+最短路)
我因为加了点变成一个2n个点,一开始dij没传入2n,没过,后来看了半天,原来是初始化时候没传入2*n,枯了。思路:把每一层也当做一个点,所以这样一共就有2n个点,假设x点在y层,我的思路y层的点标为(y+n),然后为x到(y+n-1)和(y+n+1) [ps:如果在[n+1,2n]范围内的话]加上一条权值为c的单向边,为(y+n)到x加上一条权值为0的单向边,当然我看别人做法有把每一层分成一...原创 2020-04-29 21:43:47 · 127 阅读 · 0 评论 -
LOJ 1074(SPFA最短路+判断有无负环+找负环)
题目链接思路:spfa复杂度O(VE),可以跑,先判断有没有负环,有的话就dfs一下那个点,把第一次找到的那个负环给找出来。最后先判断x是不是负环的一部分,是的话就输出?(距离可以无限变小)。然后判断dis[x]是不是INF,如果是INF,就一定到不了,有两种情况。1.如果有负环,负环肯定能到点1,但dfs了一下发现x到不了,x到不了负环,所以x也到不了1。2.如果没有负环,那就spfa跑...原创 2020-04-28 01:08:53 · 193 阅读 · 0 评论 -
POJ 1511 Invitation Cards(反向建边求其他n-1个点到点1的最短距离之和)
题意:有n个点(1~n),现在规定首都是节点1,其他的(n-1)个节点上都有人,这(n-1)个人每个人都要先走到首都再走回自己原来的位置,问最小的路径和是多少。思路:首先回去的路的很显然的,直接以点1为原点跑一边,把从2到n-1的dis都加起来就是最短的,那么这n-1个点到首都的最短距离之和是多少,我就想到反向建边嘛,初始化一下前向星,把所有的边都反过来,跑一遍前向星,再加一遍2到n-1的d...原创 2020-04-24 03:15:19 · 294 阅读 · 0 评论 -
POJ 1860(判断图中有无正环)
题意:给你n中货币,以及m个货币转换的关系,若a的钱为money, a转b的汇率为rate,手续费为cost,那a转b的钱就是(money-cost)*rate,现在给你一定数量的种类为s的货币,现在问你能不能进行货币转换,最后还是变成s的货币,让这个数量比一开始的多。思路:找有无正环,代码写法其实就是最长路+找负环(判断一个点是不是松弛超过n次)。/*** Author : zzy*...原创 2020-04-20 21:46:41 · 139 阅读 · 0 评论 -
hdu 1599(floyd求最小环模板)
题意:让你找出至少包含三个点并且值的总和最小的环。const int maxn = 110;const i64 INF = INT_MAX;i64 G[maxn][maxn], dis[maxn][maxn], ans, n;void floyd() { int i, j, k; for (k = 1; k <= n; ++k) { for (i ...原创 2020-04-20 00:42:07 · 142 阅读 · 0 评论 -
hdu 1704 poj 3660 (floyd求传递闭包)
hdu 1704题意:n个人,给m行a,b, 表示a能击败b,现在问你最多有多少个两人胜负的询问还不能确定。floyd过后遍历每对关系,如果G[i][j]和G[j][i]都是0,那就不能确定。/*** Author : zzy* Date : 2020-04-19-19.12.20 Sunday*/#include <bits/stdc++.h>#define eb...原创 2020-04-20 00:37:46 · 107 阅读 · 0 评论 -
POJ 1797(堆优化dijkstra 求路径上最小路长度的最大值)
因为要求路径上最小路的长度的最大值,可以想到dijkstra思想,优先队列要维护当前长度大的在队顶,赋值把dis数组赋为-INF,源点节点的dis赋为INF。每次邻接表没清空,看了半小时,汗。#include <stdio.h>#include <vector>#include <algorithm>#include <string.h>...原创 2020-04-19 00:36:09 · 223 阅读 · 0 评论 -
CF 20C Dijkstra?(预处理+bfs)
题目链接题意:给你以后n个点(编号为1~n),m个无向边,有可能形成环,问你从 1 到 n 的最短距离是多少,如果到不了就输出-1, ps:两点之间可能有多条边。思路:一看这题不是bfs秒了吗,直接bfs维护每个点的最短距离, 那么问题来了,为什么会T, 点的范围1e5,边的范围1e5, 1e5+1e5没理由t啊,因为这不是到了这个点就可以把这个点去掉的bfs,而是要维护到这个点最短距离...原创 2020-04-04 18:27:22 · 194 阅读 · 0 评论