最短路径算法
HT008_123
家人们点点关注叭
展开
-
灾后重建
QAQ 对弗洛伊德的优化233#include <cstdio>#include <iostream>#include <cstring>#define inf 0x3f3f3f3fusing namespace std;int map[300][300];int t[999];int main(){ int n,m,k; memset(map,0x3f,sizeo原创 2017-04-05 19:10:04 · 216 阅读 · 0 评论 -
[SDOI2009] Elaxia的路线
题目描述:求两个起终点的最短路的最长公共路径题目分析:我们跑4遍SPFA,分别求出四个点到所有点的最短路. 枚举每条边 然后判断这条边是否都满足两者的最短路 最后做一下拓扑求一下最长路径即可题目链接:Luogu 2149Ac 代码:// luogu-judger-enable-o2#include <iostream>#include...原创 2018-03-27 21:42:15 · 184 阅读 · 0 评论 -
[Luogu P1342] 请柬
传送门题目分析:正建图,统计,反建图,统计。 没了。#include #include #include #include #define il inline#define cnt Cnt[f]using namespace std;const int maxm=1100000;int inf;int head[2][maxm],to[2][maxm*2],原创 2018-01-20 20:13:30 · 221 阅读 · 0 评论 -
NOIP2017 D1 T3 逛公园
NOIP2017中一道非常有争议的题目。 因为多组数据的庞大数据量+CCF老爷机器的评测速度导致很多人写了正确解法却只得了70分。 不过这一切都跟我没关系 ~~因为我考试的时候邻接链表打错了个变量爆零了~~ 成功变成SB选手。讲讲这题的做法。 其实状态很好想。 DP转移f[i][k] 到点i的距离比最短路多k时的方案数 至于最短路可以用SPFA求出来。 转移的话 DP[i][k]=原创 2018-01-04 10:16:35 · 411 阅读 · 0 评论 -
寻找道路
传送门 蒟蒻表示这题只会用BFS。。。 首先把输入的边反过来建,然后跑BFS,看终点可以跑到哪些点。 然后枚举所有点的邻接点,看看是否全部可以跑到终点。 然后把输入的图按照要求重构一遍。跑BFS求答案。。。#include <cstdio>#include <iostream>#include <queue>using namespace std;const int maxm=210原创 2017-10-18 14:53:15 · 264 阅读 · 0 评论 -
保留道路
将边排序,以g为第一关键字,s为第二关键字 每次枚举一个maxg,将gif(a[i].s+a[i].g>ans) continue;如果当前ans<当前加入的边的g+s,那么这条边对于ans无任何贡献(因为在边集中的边的s的最大值(加入此边后)一定>=当前S),那么这些边生成的最小生成树所得出ans一定比当前ans大,无意义 不加60,加了AC#include <cstdio>#include原创 2017-08-21 17:02:32 · 373 阅读 · 0 评论 -
Dwarf tower
SPFA松弛操作,注意不要记录一个cost边权,用固定的dis计算即可 注意全部入队#include <cstdio>#include <iostream>#include <queue>using namespace std;int dis[11000];int head[11000],net[210000],to[210000],p[210000],cnt;bool f[11000原创 2017-08-22 10:20:19 · 333 阅读 · 0 评论 -
佳佳的魔法药水
QAQ 迪杰斯特拉算法 cost[i]表示获得i药水所需要的最小代价,f[i]表示i药水是否已经找到了最小花费,ans[i]表示i药水在当前最小花费的方案数,f[i][j]表示i药水与j药水能够合成的药水 类似于迪杰斯特拉,每次找一个值最小但却没有确定最小值的药水,将其标记为最小值,然后枚举能与此药水合成药水的药水,用找到的药水与配对的药水更新合成药水的最小值 至于方案数,有两种情况, 1原创 2017-08-05 11:27:33 · 425 阅读 · 0 评论 -
银牛派对
QAQ 有两个操作,一个是单源最短路的起点,一个是单源最短路的终点,前一个好说,直接以x为起点跑SPFA就行了,至于后一个,我们只需要把路反过来建,然后在跑一边SPFA就行了233#include <cstdio>#include <iostream>#include <algorithm>#include <queue>#include <cstring>using namespace原创 2017-08-05 10:03:31 · 506 阅读 · 0 评论 -
华容道
70分的做法不说了,见前面的BLOG http://blog.csdn.net/qq_35914587/article/details/76168543 说一下满分的做法,我们先处理出move[i][j][k][l]数组表示i,j这个点在k方向上有个白格子,这个点要到l方向所需要的最小步数,利用这个数组建图,然后用BFS拓展出空格子到初始位置四个方向的最短路径,作为dis的初始值,然后按照SPF原创 2017-08-11 19:16:29 · 470 阅读 · 0 评论 -
P1613 跑路
传送门 刚开始眼瞎,看成了跑2^k米。。。。。。。 智障的我:这不就是个最短路吗……. 忽然发现:你这不是放屁吗,如果正好公司和家差4千米,这样1秒就跑完了。。。。。 这可咋办呢 正解 : DP+倍增(心情复杂) f[i][j][k]表示j,k的距离是2^i次方,那么这两个点便可以1秒到达 问题是咋求呢 如果f[i-1][j][k]与f[i-1][k][v]都为真,那么f[i][j]原创 2017-08-16 20:16:53 · 333 阅读 · 0 评论 -
Code vs 1391 伊吹萃香(虫洞)
QAQ 思路:SPFA+分层图 dis[i][j]表示第i个节点在第j个时间的最短路径 可以看出j并不需要全部的记下来,我们只需要用0,1来记录时间就行了 同理vis数组同样两维 根据题目要求拓展的花费,注意处理等待的情况 优化,双向队列,如果当前拓展出的节点dis比队首小,就将这个节点放在队首,这样就可以更快的拓展出最终的状态辣#include<iostream>#include<c原创 2017-08-09 10:56:08 · 380 阅读 · 0 评论 -
[AOIP 2015] 雅加达的摩天楼
题目描述:qwq…题目分析:其实就是个最短路啊,然后发现建的边最多会有N2N2N^2条… 所以我们考虑用分块的思想来优化建图。 Pi>sqrt(n),暴力加入每一条边,每次最多sqrt(n)条边。 Pi≤sqrt(n),对于每个点添加sqrt(n)个辅助点,这里可以理解成一栋楼有许多层,每一层一步能走的范围都不同,然后每一层分别连边,每一层到楼底连边。对于一只doge,从楼...原创 2018-05-12 11:35:55 · 392 阅读 · 0 评论