
最短路
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Fair CodeForces - 987D
点击打开链接对于每一种颜色 以0为超级源点 向所有该种颜色的点建边 这样每个点都可以得到所有颜色的最近道路 跑k次最短路然后对于每一个点 在所有k种颜色中 取距离最近的s个即可后来发现 这是个无权图 还跑什么最短路 直接BFS不就行了 智障啊!#include <bits/stdc++.h>using namespace std;struct node1{ ...原创 2018-06-01 21:36:49 · 303 阅读 · 0 评论 -
Planets CodeForces - 230D
http://codeforces.com/problemset/problem/230/D在普通最短路的基础上 每个点在一些时间点是无法到达的 看了题解才懂。。松驰每个点时 看一下该点在当前用来松弛的这个时间点能否到达 能就直接松驰 不能就找一个最近的合法时间 这样对于每个点 相当于来的时间段不同 则边的权值不同 预处理二分即可#include <bits/stdc++.h&...原创 2018-09-06 09:07:50 · 260 阅读 · 0 评论 -
Travel SCU - 4444
http://acm.scu.edu.cn/soj/problem.action?id=4444先看 1与n之间是否有原图边 有的话就求补图最短路和a比较 没有就求原图最短路和b比较 都是一边BFS#include <bits/stdc++.h>using namespace std;#define ll long longstruct node{ int ...原创 2018-08-31 10:18:35 · 397 阅读 · 0 评论 -
Sparse Graph HDU - 5876
http://acm.hdu.edu.cn/showproblem.php?pid=5876给一个无权无向图 求原点到其他点的最短路 建补图是不可能的 只能从原图入手考虑将所有点划分为两个集合 一个是已经知道与原点最短距离的记为A 另一个未知记为B 扫一遍A中所有点 遍历他们的原图邻接边 对所有邻接点标记加一 然后看B中有哪些点和A中所有点都有原图边 这些点在当前是不可能被松弛的 B中剩下...原创 2018-08-31 09:06:46 · 191 阅读 · 0 评论 -
Trucking HDU - 2962
点击打开链接题目要求找到最大的可到达目的地的货运量 此处需要用到二分当前高度下 可以到达目的地 下次循环就把高度上调 找不到就下调还有就是在求最短路时要处理好某条边高度限制的问题 可不知道哪里边界处理有问题 不断WA..搞了两三个小时 从网上找了个和自己思路几乎一模一样的博客借鉴一下 实属无奈#include <stdio.h>#include <...原创 2017-08-02 21:28:40 · 356 阅读 · 0 评论 -
Invitation Cards HDU - 1535
点击打开链接题意为 从1出发到其他所有点 路费多少 再从各点回来 路费多少 两者相加其他都是废话 比赛时题意就没理解#include <stdio.h>#include <vector>#define N 9999999999using namespace std;struct node{ int v; int w;};vec...原创 2017-08-04 18:47:42 · 305 阅读 · 0 评论 -
Flight HDU - 3499
点击打开链接这道题一开始没有思路 看了一下别人的博客 代码自己实现还是反向存图如果直接改变一条边的花费 很可能会使之前求得的两点之前的最短路失去意义方法就是 遍历每条边 起点到这条边左顶点的花费 这条边打折后的花费 还有终点到这条边右顶点的花费(反向图) 三者相加这样两条最短路一定是正确的 不受当前遍历到的这条边的花费打折的影响遍历结束 最小值即为所求 #incl...原创 2017-08-04 21:49:57 · 332 阅读 · 0 评论 -
Delay Constrained Maximum Capacity Path HDU - 1839
点击打开链接题目要求 首先要按时到达 其次尽可能走最短路线通过二分 看能否在以当前长度的边为最短边的情况下按时到达 若不能则下调 否则上调因为一条路径中最短边越长 对这条路径中边的要求也就越高 某些费时更少的边就被排除了 可能导致无法按时到达反之 超过时限的可能也就越小 #include <stdio.h>#include <vector>#i...原创 2017-08-06 21:42:09 · 265 阅读 · 0 评论 -
Hot Pursuit II HRBU - 1050
点击打开链接初次接触次短路 模板题 #include <bits/stdc++.h>using namespace std;#define N 0x3f3f3f3fstruct node1{ int v; int w;};struct node2{ friend bool operator < (node2 n1,node2...原创 2017-09-14 16:00:23 · 290 阅读 · 0 评论 -
Edge Deletion CodeForces - 1076D
http://codeforces.com/contest/1076/problem/D求单源最短路时保存一下路径 最后就是一棵树 然后bfs一遍即可 #include <bits/stdc++.h>using namespace std;#define pb push_backtypedef long long ll;const int maxn=3e5+10;...原创 2018-11-13 12:25:10 · 279 阅读 · 0 评论 -
The Geodetic Set Problem UVA - 1198
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3639每次询问给一个点集 问这些点集中两两之间的最短路能否覆盖整个图所有点 如果两点之间有好几条最短路就都算上 且最短路的起点终点也算上先floyd预处理 然后枚举任意两点之...原创 2018-11-15 15:22:37 · 221 阅读 · 0 评论 -
道路和航路 蓝桥真题
http://lx.lanqiao.cn/problem.page?gpid=T22因为有负权边 只能用spfa 但是数据比较强 只能做到95分。。 可能有其他方法吧主要记一下spfa两种优化第一种是SLF 就是改用双端队列 当一个点v入队列时 判断其和队首点front的大小关系 如果队列为空或者dis[v]>=dis[front] 则把v扔到队尾 否则扔到队首第二种是LLL...原创 2019-05-05 20:16:55 · 208 阅读 · 0 评论 -
直捣黄龙 天梯
https://pintia.cn/problem-sets/994805046380707840/problems/994805049455132672思路很裸 细节很多记录前驱 记录最短路径数量 还要加上占领城镇数和杀敌数作为第二第三关键字#include <bits/stdc++.h>using namespace std;typedef long lon...原创 2019-03-28 20:58:35 · 335 阅读 · 0 评论 -
周游世界 天梯
https://pintia.cn/problem-sets/994805046380707840/problems/994805048482054144对于每个公司的线路 将线路上的点两两都连一条边 权值即为两站距离 这样边权和作为第一关键字边数和作为第二关键字 跑一遍dijkstra并记录路径即可水题出的太慢 最后竟然没写完 一定要稳住心态啊。。#include <...原创 2019-03-28 09:17:14 · 286 阅读 · 0 评论 -
Buy a Ticket CodeForces - 938D
多源最短路题 当然不是指floyd单源最短路就是起点集中只有一个元素{s} dis[i]就代表s到i的最短距离 多源最短路就是起点集中有多个元素{s1,s2...} dis[i]代表起点集合中某一个到i的最短距离 具体是哪个不知道对于这个题起点n个各不相同 但是终点却可能有重复的点 逆向考虑 从终点出发跑向起点 正好对应上述多源最短路#include <bits/s...原创 2019-03-23 19:35:24 · 178 阅读 · 0 评论 -
Pizza Delivery Gym - 101986F
http://codeforces.com/gym/101986/attachments对于每条边 判断将其反转后 新的最短路和原有最短路的大小关系 各询问相互独立反转每条边之后 所有经过这条边的路径中最短的那一条 有可能是新的最短路 正向反向跑两遍即可 但是仅仅这样还不够 当这条路径大于原有最短路时 我们不知道是否还有其他和原有最短路径相等的存在对于原图 扫一遍每条边 判断所有经过这...原创 2018-12-13 12:12:39 · 453 阅读 · 0 评论 -
find the mincost route HDU - 1599
http://acm.hdu.edu.cn/showproblem.php?pid=1599floyd求最小环问题 有向图的话 跑一遍模板然后n^2扫一遍就好 但是无向图不能这样无脑搞 比如三阶完全图 边权都相等 那就不存在松弛了 明明有环但是判不出 想通过记录最小次小值来搞又会出现重点问题 比如题目第二个样例 dis[1][3]=2 dis[3][2]=1=>dis[1][2]=3 这...原创 2018-12-06 13:51:43 · 200 阅读 · 0 评论 -
Froggy Ford Gym - 100851F
http://codeforces.com/gym/100851/attachments青蛙过河 n个石头 当作n个点 任意两点之间都有边 边的花费即为两点欧式距离 现在可以在任意位置加一个石头 使过河的最大边花费最小先从两岸分别跑一遍最短路 然后n^2的暴力枚举 看新加的石头加在原有石头i和j的中点后的花费是多少即可注意下一边界即可 #include <bits/st...原创 2018-11-30 14:26:33 · 516 阅读 · 0 评论 -
电话网络 CODEVS - 3336
点击打开链接自己对二分和最短路的思想还是理解不够 太局限于模版 想到该用二分 却不知从何处下手题目要求设法将起点(1)与终点(n)连接 你可以找出 k 条边使它们的花费为零 而总花费就是这条路径上剩余边中最长边边长先将边升序排序 二分找最长边 然后跑spfa在求最短路时 dis[n]数组不再代表两点距离 而是两点之间的路径中有多少条边超过了当前二分的最长边这样最后的结果 就代表...原创 2017-10-07 16:28:02 · 503 阅读 · 0 评论 -
施工方案第二季 CODEVS - 1700
点击打开链接对于一棵树 我们以任一节点为根节点 找到与其相距最远的一个点p1 再以p1为根节点 找到与其相距最远的一个点p2此时p1到p2的路径就是树的直径 而树的重心(到其他节点的最远距离最小)就在这个直径上至于为什么..我也不清楚 #include <bits/stdc++.h>using namespace std;#define ll long lon...原创 2017-10-08 21:01:12 · 311 阅读 · 0 评论 -
A Walk Through the Forest HDU - 1142
点击打开链接预处理每个点到终点距离 然后记忆化搜索即可 #include <cstdio>#include <queue>#include <cstring>#include <algorithm>using namespace std;#define N 0x3f3f3f3fstruct node1{ int ...原创 2018-03-28 09:49:31 · 172 阅读 · 0 评论 -
Farm Game HDU - 3696
点击打开链接分析可得 每种物品要么完全转换为另一种物品 要么保持不变 可以发现 最后总的价值就是 sgm(i:1->n) have[i]*value[j]*rate 其中have[i]是第i种物品初始数量 value[j]是第i种物品的最终去向j物品 rate是一路转换得到的转化率累乘之积正向考虑无法建图 因为一个物品的数量可能会因为其他逻辑相邻(有转换关系)的物品的转化而多次增加 ...原创 2018-04-27 13:51:36 · 190 阅读 · 0 评论 -
地铁 CSU - 1808
点击打开链接因为有c值的存在 不满足dp的后效性 所以不能直接跑最短路要把边抽象为点 将t值当做每个点的点权 每两个点的c值之差当做边权 出发点就是原图中所有和1相连的边对应的点 建立一个超级源点 连向这几个点 目标点就是原图中所有和n相连的边对应的点还有建图的问题 再建一个新图非常耗时(貌似会比原图稠密很多 比如星形图) 我们可以直接利用原图来跑最短路 详见代码这道题的复杂度问题...原创 2018-05-01 18:53:36 · 291 阅读 · 0 评论 -
Okabe and City CodeForces - 821D
点击打开链接将行与列都抽象为点 对于每一行或者列 把所有与其有接触的点都挂到上边 一入一出的权值为1和0 相邻点再连权值为零的边即可#include <bits/stdc++.h>using namespace std;#define N 0x3f3f3f3fstruct node1{ int x; int y;};struct node2{...原创 2018-05-02 13:54:16 · 227 阅读 · 0 评论 -
Remmarguts' Date POJ - 2449
点击打开链接K短路 存模板#include <cstdio>#include <queue>#include <cstring>#include <algorithm>using namespace std;#define N 0x3f3f3f3fint dis[1010];struct node1{ int v...原创 2018-05-03 10:52:35 · 178 阅读 · 0 评论 -
Meeting HDU - 5521
点击打开链接将每个集合抽象为一个点 将该集合中的点都挂到上面 不用两两建边#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct node1{ int v; ll w; int next;};s...原创 2018-05-13 15:19:38 · 186 阅读 · 0 评论 -
Legacy CodeForces - 787D
http://codeforces.com/problemset/problem/787/D线段树建图纯模板题#include <bits/stdc++.h>using namespace std;#define ll long long#define N 0x3f3f3f3f3f3f3f3fstruct node1{ int v; ll w; ...原创 2018-07-30 09:17:42 · 370 阅读 · 0 评论 -
In Touch HDU - 5361
点击打开链接当一个点要和一个连续区间内的所有点连权值相同的边时 可以用线段树来优化这个过程 就和区间更新一样的还有要注意的就是内存对齐问题 node1结构体中的 ll w 如果放在中间的位置就会MLE 具体什么是内存对齐问题就不说了 自行百度#include <cstdio>#include <queue>#include <cstring>...原创 2018-05-14 09:40:13 · 189 阅读 · 0 评论 -
Destroying Roads CodeForces - 544D
点击打开链接看题解才懂..首先可以肯定的是 除了两条最短路上的边 其余边都可以去掉而这两条最短路上的边 是否可以合并某些道路 使距离仍在l1与l2范围内(合并后未必是最短路)求任意两点最短路 暴力枚举任意两点 看合并后是否满足l1与l2的范围注意对每一对枚举的点i与j 有四种情况 s1可以连到i或j s2也可以连到i或j #include <bits/stdc+...原创 2018-03-23 13:11:49 · 239 阅读 · 1 评论 -
Car的旅行路线 蓝桥真题
蓝桥题是真的坑 样例上写的是t组数据的格式 但是测试数据根本没有t 都是单组 这不是坑人吗?其实就是最短路裸题 建图时需要一点计算几何对于每个矩形只给任意三个顶点 利用向量点乘判断直角点假设 1和3 2和4 互为对角点 那就满足 x1+x3=x2+x4 且 y1+y3=y2+y4 以此求出最后一个点 #include <bits/stdc++.h>...原创 2018-03-10 13:22:40 · 379 阅读 · 0 评论 -
最小距离之和 CODEVS - 2011
点击打开链接floyd变形 每次破坏一条边 问破坏这条边后所有国家距离之和如果按照题目所给顺序求解 感觉每次都要跑一遍floyd n^4肯定TLE但是逆序考虑 每次增边 然后松弛就好办了floyd板子就是挑当前一个点 k 看其他两点 i j 能否通过 k 来进行松弛 这里就是把点换成边而已 #include <bits/stdc++.h>using name...原创 2017-10-10 13:23:58 · 299 阅读 · 0 评论 -
Jzzhu and Cities CodeForces - 449B
点击打开链接做的很迷的一道题。。开始用Dijkstra 将公路铁路都加入图中 看每一个有铁路直达的点 能否通过除这条直达铁路之外的路径来松弛 即该点是否存在代价小于等于这条铁路的路径WA的很离谱 一时还找不到问题的原因 留坑。。也希望路过的大佬指正。。 #更正 填坑 其实没想的那么难 先记录下每个点通过走铁路直达的最短距离(dis2) 同时记录下从首都...原创 2017-11-14 14:01:04 · 286 阅读 · 0 评论 -
find the longest of the shortest HDU - 1595
点击打开链接只枚举起点到终点最短路上的所有边 看删除当前边后起点到终点最短距离是多少因为删除最短路以外的边对于起点与终点距离没有影响 而最短路上最多(n-1)条边 时间复杂度为 (n^2)*(logn) #include <bits/stdc++.h>using namespace std;struct nodeI{ int v; int w;...原创 2017-11-20 20:30:33 · 220 阅读 · 0 评论 -
Marriage Match IV HDU - 3416
点击打开链接这个题也是看了题解才想到要用最短路和网络流结合的。。题目要求每次只能走最短路 意思不是走一次最短路就把这条路径删除 然后再找新的最短路即原图的次短路 而是仍然找一条和最开始的最短路长度一样的路径这样所有构成最短路的边都是可以确定的反向建图 dis1[n]代表从起点ss到每个点的最短距离 dis2[n]代表从终点ee到每个点的最短距离 对于一条边edge[i] 如果di...原创 2017-12-02 09:17:55 · 219 阅读 · 0 评论 -
The Shortest Path in Nya Graph HDU - 4725
点击打开链接还是看了题解才懂。。这道题考的就是抽象建图的思维能力有n个顶点 挂在不同的层上 不同层之间的定点可互达 同层顶点互不相干 除非有特殊边相连接一开始暴力建图 先按层数把顶点排序然后二分加边 T了。。后来想把层抽像出来 层与层,层与该层上的顶点,不同层的顶点 都建双向边 但这是完全错误的 这样会使同层顶点全部可以通过抽象的层顶点连接了 并且第i层与第i+2和第i-2层...原创 2017-12-02 13:06:24 · 186 阅读 · 0 评论 -
King POJ - 1364
点击打开链接首先需要保证图的连通性。。比如0点(此代码中以0为起点)与其他点都不连通 而图中又有负环 这时就会判不到负环这道题关心的是整个[0,n]区间 任何一个地方出现负环就说明不合要求 #include <stdio.h>#include <queue>#include <cstring>#include <algorith...原创 2017-12-04 19:03:00 · 262 阅读 · 0 评论 -
昂贵的聘礼 POJ - 1062
点击打开链接的确是道好题 考验建图能力把可交换的价格看作边权 如果a物品可以用b物品加c金币换到 就建一条从a到b且权值为c的边其实不管怎么买卖 手中的东西始终只有一个 所以从各个物品到水晶球与从水晶球到各个物品其实含义一样 反向以水晶球为起点就好跑完最短路后 dis[i]就代表 开始先买i物品 一路买卖交易 直到换取酋长水晶球 然后用所有dis[i]+val[i](物品本身价值)...原创 2017-12-06 20:03:26 · 171 阅读 · 0 评论 -
The Doors POJ - 1556
点击打开链接对于横坐标不同的两个点 判断是否可以通过直线相连 即两者间连线不与其他线段相交 若符合条件则加一条边 最后通过dijkstra或spfa求解 #include <cstdio>#include <queue>#include <cmath>#include <cstring>#include &l...原创 2018-03-04 10:40:37 · 191 阅读 · 0 评论 -
物流运输 洛谷 - P1772
https://www.luogu.org/problemnew/show/P1772一共n天 每天都对应一张独立的图 dis[a][b][i][j]代表a到b天所有图取并集后 i到j的最短路(即只要某天某个点不能用 则这一段时间内都将该点忽略) floyd预处理一下即可然后dp[i]代表到第i天结束时的最小代价dp[i]=min(dp[i],dp[j-1]+dis[j][i][1][m...原创 2019-05-15 20:05:25 · 241 阅读 · 0 评论