首页 > TAG信息列表 > P1613
【刷题】P1613跑路
//原本以为这题只需要floyd得到dis[1][n] //然后拆分出二进制中1的个数 (这里是不是有个函数可以用) //但是样例显示此题不是普通最短路,要求的是时间最短而不是路程最短 //那么在不改动的情况下,也许可以寻找环? #include<bits/stdc++.h> #define ll long long using namespace洛谷 P1613 跑路
老稿新发,之前的有问题。 【题目】 https://www.luogu.com.cn/problem/P1613 【审题】 1.每秒钟可以跑2^k千米(k是任意自然数); 2.总跑路长度不能超过maxlongint千米; 3.有向图。 【分析】 首先,这是一个有向图单源最短路问题。但是这里的路程不是边权和,而是走过的时间和。我洛谷P1613 跑路(倍增+最短路)
题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零。可是小A偏偏又有赖床的坏毛病。于是为了保住自己的工资,小A买了一个十分牛B的空间跑路器,每秒钟可以跑2^k千米(k是任意自然数)。当然,这个机器是用longint存的,所以总跑路长度不能超过maP1613 跑路
P1613 跑路 预处理出所有一次能到的节点,然后floyd #include <bits/stdc++.h> using namespace std; #define ll long long #define rint register int ll n,m,mmap[55][55]; bool g[55][55][55]; void f() { for(rint k=1;k<=50;k++) for(rint i=1;i<=n;i++) for(rintP1613 跑路
P1613 跑路 题意 已知一个每秒可以移动 2k2^k2k 距离,kkk 任意 给出一个有向图,上限 505050 个点,100001000010000 条有向边 请问从 111 到 nnn 所需的最少时间 思路 由于与 2k2^k2k 次方有关,所以可以像 STSTST 表一样处理 用 dp[i][j][k]dp[i][j][k]dp[i][j][k] 表示 iii 与【题解】Luogu P1613 跑路 倍增+最短路
题里都说了$2^k$,明显倍增 因为跑路器的存在,不能直接跑最短路的原因: 如图,如果直接最短路从1号点到5号点的距离为3,需要3秒 而实际上走$1->5$这条边,因为$8=2^3$,只需1秒 $n≤50$直接无脑floyed随便跑 code 1 #include <bits/stdc++.h> 2 using namespace std; 3 namespace gP1613 跑路
P1613 跑路 倍增 我们考虑floyd 对于i,j如果有一个中介k使得i->k只用2^p以及k->j只用2^p,那么i->j可以一步到达 最后跑一遍floyd即可 记得是有向图! 代码: #include<bits/stdc++.h>using namespace std;typedef long long ll;const int N=55;struct node{ int from,to;};int n,m;【洛谷P1613】跑路
这道题说每一步可以走2k个距离,那么这道题就直接和倍增建立了联系。 由于n的范围很小,我们可以用Floyd处理边的关系,定义vis[i][j][k]表示ij之间是否存在2k的路径,dis[i][j]表示ij之间的最短距离是多少。 我们可以先进行一次Floyd处理vis,枚举ij以及中间点k,若vis[i][k][l-1]==1且vis[k][P1613 跑路 倍增思想 + 邻接矩阵
题意 给定一个有向图,每条边的花费为1。现在有一个空间跑路器,可以走2^k长度的路,只用花1秒的时间。问从1走到n最少的时间。n <= 50, k <= 64。 思路 这道题说是倍增,但是写起来不见倍增的影子,我觉得真妙,对倍增有了更膜拜的认识。我们可以开一个bool矩阵dp【i】【j】【k】,表示i到j是否