首页 > 其他分享 >Luogu_P1613 跑路 题解

Luogu_P1613 跑路 题解

时间:2023-04-15 10:55:43浏览次数:35  
标签:int 题解 短路 long MAXN Luogu P1613 dis

发现和最短路差不多,不过不能朴素的跑最短路。考虑对于每两个相隔 \(2\) 的整数次幂的点建边,在这个新图上跑最短路就是答案。设 \(f_{i,j,k}\) 表示从点 \(i\) 跳 \(2^k\) 步能否到点 \(j\),转移方程就是一个普通的倍增。如果点 \(i\) 和点 \(j\) 可以一步到达,那么就在新图上建一条长度为 \(1\) 的边。跑 Floyd 最短路即可。

#include <bits/stdc++.h>
using namespace std;
#define int long long

const int MAXN = 105;
int n, m, dis[MAXN][MAXN]; bool f[MAXN][MAXN][MAXN];

signed main(void) {
	cin >> n >> m;
	memset(dis, 0x3f, sizeof dis);
	for (int i = 1; i <= m; ++i) {
		int x, y;
		cin >> x >> y;
		dis[x][y] = f[x][y][0] = 1;
	}
	for (int k = 1; k < 105; ++k) {
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= n; ++j) {
				for (int l = 1; l <= n; ++l) {
					if (f[j][i][k - 1] && f[i][l][k - 1]) {
						dis[j][l] = f[j][l][k] = 1;
					}
				}
			}
		}
	}
	for (int k = 1; k <= n; ++k) {
		for (int i = 1; i <= n; ++i) {
			for (int j = 1; j <= n; ++j) {
				if (dis[i][j] > dis[i][k] + dis[k][j]) {
					dis[i][j] = dis[i][k] + dis[k][j];
				}
			}
		}
	}
	cout << dis[1][n] << endl;
	return 0;
}

标签:int,题解,短路,long,MAXN,Luogu,P1613,dis
From: https://www.cnblogs.com/XiaoQuQu/p/17320677.html

相关文章

  • ABC249F 题解
    前言题目传送门!更好的阅读体验?很好玩的贪心。思路如果第\(i\)次操作为覆盖操作,那么\(1\simi-1\)次操作都是无效的,原因显然。这启示我们从后往前扫(前面的会被忽略,后面的不会啊!)。在此基础上,就是分类讨论一下(假设当前的最大答案为\(sum\)):当前操作是覆盖操作:如果不......
  • 【题解】Tree MST
    题面给定一棵\(n\)个节点的树,现有有一张完全图,两点\(x,y\)之间的边长为\(w_x+w_y+dis_{x,y}\),其中\(dis\)表示树上两点的距离。求完全图的最小生成树。\(n\leq2\times10^5\)。题解???神秘借鉴支配对的思想,点分治后将树中点权替换为\(dep_i+w_i\),选择点权最小的一个......
  • [ABC296Ex] Unite 题解
    考虑状压dp。设\(f_{i,j,s}\)表示当前正在决策坐标为\((i,j)\)的格子,且列状态为\(s\)。其中列状态维护了当前轮廓线上的连通块,我们可以使用最小表示法来简单维护。(为什么不用广义括号序列?因为其涉及到\(5\)个可选值,由于\(m\le7\),所以这两个都需要用到八进制,而最小表示......
  • [Educational Codeforces Round 118 (Rated for Div. 2)]题解
    A题意:给定两个数,每一个数有两个属性,第一个属性是p1,第二个属性是p2.表示这个数有p2个后缀0.这个数本身等于p1后面加p2个0.问给你两个这种数,判断大小。思路:赛场上想到的:如果最终的长度不一样,可以直接根据长度判断。如果相等,就把后缀0加上直接比较大小就可以(比较字典序的大小),但......
  • 2012-2013 ACM-ICPC, NEERC, Moscow Subregional Contest题解
    题目链接:2012-2013ACM-ICPC,NEERC,MoscowSubregionalContestC.Cinderella(贪心)思路答案为大于平均值的数的数量代码#include<bits/stdc++.h>usingnamespacestd;usingi64=longlong;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);......
  • CF1473D 题解
    题目传送门题目分析线段树、前缀和、\(\text{ST}\)表题解都有了,我补一发猫树题解吧。由于每次操作只能将大小改变成跟原来差\(1\),所以只需要知道这段操作中的最大值和最小值,最后所求的答案的范围就被卡住了。对于每一次操作,我们把操作序列拦腰斩断,那么分别求两边的范围,最后减......
  • CF1758D 题解
    前言题目传送门!更好的阅读体验?用一种非常麻烦的做法把自己写自闭了,和题解区不一样,但是方法困难很多。思路代码属于混乱邪恶了,凑合着看看。#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;intn,ans[300005];longlongcalc(){ longlo......
  • ubuntu 20.04 基于docker快速搭建中文 的一些问题解决 Utilization of discoverer pro
    1.Utilizationofdiscovererprocessesover75%解决办法问题状态如下zabbixserver在开启Discovery功能后,zabbixweb页面报警提示:“Zabbixserver:Ulitizationofdiscovererprocessesover75%”。原因:每个discovery任务占用一个discovery进程,但是zabbixserver默认只配置了一......
  • scikit-learn 中 Boston Housing 数据集问题解决方案
    scikit-learn中BostonHousing数据集问题解决方案在部分旧教程或教材中是sklearn,现在【2023】已经变更为scikit-learn作用:开源机器学习库,支持有监督和无监督学习。它还提供了用于模型拟合、数据预处理、模型选择、模型评估和许多其他实用程序的各种工具。安装pipinsta......
  • 题解:C Future
    题目:给n个范围,第i个范围选pi,然后定义特征值k=p1+p2+...+pn。这次的开心度就是A(k%m)。m是给的一个数组A,长度为m。 要求:  就是个全排列组合的问题,找规律。 举个例子,有n个礼物,分别是(L1,R1)(L2,R2)(Ln,Rn)每个区间取个数然后相加,所有出现的结果,其实就是A[L1+L2+........