HDU 4889 Scary Path Finding Algorithm
其实这个题是抄的题解啦…… 题解给了一个图,按照那个图模拟一遍大概就能理解了。
题意:
有一段程序,给你一个C值(程序中某常量),让你构造一组数据,使程序输出"doge"
那段代码大概是 SPFA的SLF优化。其实题目的意思是让我们构造一组数据,使得总的出队次数大于C。
数据范围 C<=23,333,333。输出的图中最多有100个点,没有重边、自环、负环。
思路:
SLF: 设队首元素为 i, 队列中要加入节点 j, 在 时加到队首而不是队尾, 否则和普通的 SPFA 一样加到队尾.
这个优化是基于贪心的思想,因为出当前结点的的距离越小,那么他可能更新点就越多,从而达到优化的目的。
因为是贪心,我们可以“欺骗”他一下。
我们可以让距离比较大的结点加入队列,那么他会比较晚出队,但是,他会经过一系列的会更新原来更新过的结点,那么被更新的点会重新入队。那么被更新点原来的更新路径会重新被更新一次。
题解:来自这里
代码: 先在程序中把图建出来,然后在输出图。这样做会简单一些。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <cstdlib> 5 #include <cmath> 6 #include <algorithm> 7 #include <string> 8 #include <queue> 9 #include <stack> 10 #include <vector> 11 #include <map> 12 #include <set> 13 #include <functional> 14 #include <time.h> 15 16 using namespace std; 17 18 const int INF = 1<<30; 19 const int MAXN = 105; 20 21 int myPow(int d, int n) { 22 int res = 1; 23 while (n>0) { 24 if (n&1) res *= d; 25 d *= d; 26 n >>= 1; 27 } 28 return res; 29 } 30 31 vector<pair<int, int> > G[MAXN]; 32 int n, m; 33 34 void getGraph() { 35 for (int i = 0; i < MAXN; i++) 36 G[i].clear(); 37 n = 1; 38 for (int i = 30; i >= 0; i--) { 39 G[n].push_back(make_pair(n+1, 0)); 40 G[n].push_back(make_pair(n+2, (i!=0) ? (-myPow(2, i-1)) : 0)); 41 G[n+1].push_back(make_pair(n+2, -myPow(2, i))); 42 n += 2; 43 } 44 m = 0; 45 for (int i = 1; i <= n; i++) 46 m += G[i].size(); 47 } 48 49 void output() { 50 printf("%d %d\n", n, m); 51 for (int i = 1; i <= n; i++) 52 for (int j = 0; j < G[i].size(); j++) 53 printf("%d %d %d\n", i, G[i][j].first, G[i][j].second); 54 55 } 56 57 int main() { 58 #ifdef Phantom01 59 freopen("HDU4889.txt", "r", stdin); 60 #endif //Phantom01 61 62 getGraph(); 63 int C; 64 while (scanf("%d", &C)!=EOF) { 65 output(); 66 } 67 68 return 0; 69 }
View Code
转载于:https://www.cnblogs.com/Phantom01/p/3878177.html
HDU 4889 Scary Path Finding Algorithm相关推荐
- [多校联考-西南大学附中]切面包(线段树/概率与期望)+ Slow Path Finding Algorithm(拓扑排序/DP)+ 分数转化(数论)
文章目录 T1:分数转换 题目 题解 代码实现 T2:Slow Path Finding Algorithm 题目 题解 代码实现 T3:切面包 题目 题解 代码实现 T1:分数转换 题目 Time ...
- HDU 5385 The path(贪心、构造、最短路径树)
HDU 5385 题目大意:给定一个图,dis表示第i个点到1点的最短路,dis1=0,给有向图上的边赋权值(1~n)满足dis1<dis2<dis3<--<disk>d ...
- hdu 5385 The path
http://acm.hdu.edu.cn/showproblem.php?pid=5385 题意: 给定一张n个点m条有向边的图,构造每条边的边权(边权为正整数),令d(x)表示1到x的最短路,使得 ...
- hdu 3631 Shortest Path(Floyd)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3631 Shortest Path Time Limit: 3000/1000 MS (Java/Oth ...
- hdu 5636 Shortest Path(Floyd最短路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5636 解题思路: 这道题可以用Floyd解决,不过需要特殊处理一下: 实际上我们只需要利用添加的那三条 ...
- HDU 4338 Simple Path 点双连通+lca
[题目大意] 给你一个无向图.问,从点u到点v,若是只走简单路径,有多少个点不能到达? [思路] 这题肯定是要双连通缩点的,以前老是觉得点双连通不会用来缩点,因为割点可以属于多个连通集合,现在立马打脸 ...
- Fast-planner代码阅读2-TopoReplan (path searchiing部分)
文章目录 1. 总体流程 2.Topo Path Finding Algorithm主要算法及图例 3. topoPath路径搜索代码流程 3.1 createGraph() 3.1.1 findVi ...
- 「多校联考」第三周二场
「多校联考」第三周二场 T1 分数转换 题目 考场思考(正解) T2 Slow Path Finding Algorithm (SPFA) 考场思路 正解 T3 切面包 考场思路 正解 这套题是真的很 ...
- 《生物信息学:导论与方法》--新一代测序NGS:转录组分析RNA-Seq--听课笔记(十四)
第八章 新一代测序NGS:转录组分析RNA-Seq 8.1 转录组介绍 A transcriptome is a collection of all the transcripts present i ...
- (Shortest Paths Algorithm)
最短路算法(Shortest Paths Algorithm) 假如你有一张地图,地图上给出了每一对相邻城市的距离,从一个地点到另外一个地点,如何找到一条最短的路? 最短路算法要解决的就是这类问题.定 ...
最新文章
- provide和inject,Vue父组件直接给孙子组件传值
- 共享程序集和强命名程序集(3):强命名程序集的一些作用
- 数据库表设计的随笔(分库分表)
- 转Python 标准库 urllib2 的使用细节
- 《JAVA练习题目2》 输入十个学生的考试成绩,将及格学生的成绩从高到低排序输出。
- visualvm远程监控jvm_8款JVM性能调优监控工具(提高开发效率)
- 宝峰uv5r怎么设置信道_极蜂D301对讲机和宝峰UV5R 半月评
- oracle停止trace日志,关闭ORACLE客户端trace日志
- 企业实战05:Oracle数据库_操作表中数据
- 扩增子测序引入的假阳性稀有类群干扰对微生物群落多样性、构建机制及相互作用的研究...
- 学生静态网页设计作品之我的家乡
- HrbustOJ 1167 每种面值的货币要多少
- 三角(Triangle)
- 【Python百日进阶-Web开发-Feffery】Day344 - fac数据展示02:AntdBadge徽标数
- 数组元素全排列、组合 C语言代码
- 芯片短缺并没有妨碍英特尔创下“有史以来业绩最好的一年”
- 【程序人生】拿到offer就稳了?实习期你还得“忍”一下
- notification自定义铃声
- 简易全双工物联网远程控制门禁设计方案
- JK短裙少女怎么画?