HDU6331Problem M. Walking Plan
分块floyd
$f[i][j][k]$表示从i走k步到j的最短路
$g[i][j][k]$表示从i走k*100步到j的最短路
$h[i][j][k]$表示从i至少走k步到j的最短路
询问从x到y至少走z步的最短路时,因为至多多走n步,用上面预处理的f,g,h可以得出答案。
//Achen
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdlib>
#include<vector>
#include<cstdio>
#include<queue>
#include<cmath>
#include<set>
#include<map>
#define Formylove return 0
#define For(i,a,b) for(int i=(a);i<=(b);i++)
#define Rep(i,a,b) for(int i=(a);i>=(b);i--)
const int N=;
typedef long long LL;
typedef double db;
using namespace std;
int T,n,m,f[N][N][],g[N][N][],h[N][N][]; template<typename T>void read(T &x) {
char ch=getchar(); x=; T f=;
while(ch!='-'&&(ch<''||ch>'')) ch=getchar();
if(ch=='-') f=-,ch=getchar();
for(;ch>=''&&ch<='';ch=getchar()) x=x*+ch-''; x*=f;
} //Walking Plan hdu6331
int main() {
#ifdef ANS
freopen(".in","r",stdin);
freopen(".out","w",stdout);
#endif
read(T);
while(T--) {
read(n); read(m); memset(f,/,sizeof(f));
memset(g,/,sizeof(g));
memset(h,/,sizeof(h)); int inf=f[][][]; For(i,,n) f[i][i][]=g[i][i][]=h[i][i][]=; For(i,,m) {
int u,v,w;
read(u); read(v); read(w);
f[u][v][]=min(f[u][v][],w);
} For(k,,) {
For(l,,n) For(i,,n) For(j,,n)
f[i][j][k]=min(f[i][j][k],f[i][l][k-]+f[l][j][]);
} For(i,,n) For(j,,n) g[i][j][]=f[i][j][];
For(k,,)
For(l,,n) For(i,,n) For(j,,n)
g[i][j][k]=min(g[i][j][k],g[i][l][k-]+g[l][j][]);
For(i,,n) For(j,,n) For(k,,)
For(l,k,) h[i][j][k]=min(h[i][j][k],f[i][j][l]); int q;
read(q);
while(q--) {
int i,j,z;
read(i); read(j); read(z);
int ans=inf;
For(k,,n) {
int a=z/,b=z%;
if(b==) a--,b=;
ans=min(ans,g[i][k][a]+h[k][j][b]);
}
if(ans>=inf) ans=-;
printf("%d\n",ans);
}
}
Formylove;
}
/*
Sample Input
2
3 3
1 2 1
2 3 10
3 1 100
3
1 1 1
1 2 1
1 3 1
2 1
1 2 1
1
2 1 1
Sample Output
111
1
11
-1
*/
HDU6331Problem M. Walking Plan的更多相关文章
- 2018 杭电多校3 - M.Walking Plan
		
题目链接 Problem Description There are $$$n$$$ intersections in Bytetown, connected with $$$m$$$ one way ...
 - 2018HDU多校训练-3-Problem M.      Walking Plan
		
链接:http://acm.hdu.edu.cn/showproblem.php?pid=6331 Walking Plan Problem Description There are n inte ...
 - HDU6331 Problem M. Walking Plan【Floyd + 矩阵 + 分块】
		
HDU6331 Problem M. Walking Plan 题意: 给出一张有\(N\)个点的有向图,有\(q\)次询问,每次询问从\(s\)到\(t\)且最少走\(k\)条边的最短路径是多少 \ ...
 - 【做题】HDU6331 Walking Plan——矩阵&分块
		
题意:给出一个有\(n\)个结点的有向图,边有边权.有\(q\)组询问,每次给出\(s,t,k\),问从\(s\)到\(t\)至少经过\(k\)条边的最短路. \(n \leq 50, \, q \l ...
 - hdu6331 Walking Plan
		
题意: sol: 考虑floyed 直接暴力做的话复杂度是kn^3会炸. 考虑一个比较神仙的分块做法. 注意到我们是可以直接求单独某个k的矩阵,使用矩阵快速幂即可(取min的矩阵乘法). 单独求一次的 ...
 - hdu6331 Problem M. Walking Plan
		
传送门 题目大意 给你一个n点m条边的有向图,q次询问,给定s,t,k,求由s到t至少经过k条边的最短路. 分析 我们设dp[i][j][k]为从i到j至少经过k条边的最短路,sp[i][j]意为从i ...
 - 2018多校第三场 hdu6331 M :Walking Plan
		
题目链接 hdu6331 自我吐槽,这场多校大失败,开局签到因输入输出格式写错,wa了3发.队友C题wa了1个小时,还硬说自己写的没错,结果我随便造了个小数据,他都没跑对.然后跑对了后又进入了无限的卡 ...
 - 2018 Multi-University Training Contest 3 - HDU Contest
		
题解: solution Code: A. Ascending Rating #include<cstdio> const int N=10000010; int T,n,m,k,P,Q, ...
 - 2018 HDU多校第三场赛后补题
		
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube ...
 
随机推荐
- Yii2 自定义组件
			
basic\components\HelloWidget namespace app\components; use yii\base\Widget; use yii\helpers\Html; cl ...
 - 【LeetCode 24】两两交换链表中的节点
			
题目链接 [题解] 简单的链表操作 [代码] /** * Definition for singly-linked list. * struct ListNode { * int val; * Lis ...
 - 【LeetCode 14】最长公共前缀
			
题目链接 [题解] 二分最长前缀的长度. 然后暴力把第2..n个字符串和第1个字符串的前mid个字符匹配. 还有一种比较厉害的算法. 把这n个字符串加入到字典树当中去. 然后根节点到第一个有分支的节点 ...
 - 安装nodejs  nvm
			
安装nodejs sudo apt-get install nodejs sudo apt-get install npm 安装nvm https://www.runoob.com/w3cnote/n ...
 - pefile解析PE格式
			
import os,sys import pefile import pydasm import struct #print sys.argv def show_section(pe): print ...
 - jenkins+jhipster集成
			
准备工作: 安装Jenkins 新建一个Jhipster项目 开始集成: 新建一个Jenkins构建项目 只配置源代码 构建,成功,稍微有点信心了 配置执行构建脚本 ./mvnw package -P ...
 - 天道神诀---FTP服务
			
FTP 2种模式 主动模式(默认) 客户端以1024-65535之间某一端口发送指令到服务端的21端口,并建立连接.服务端接受到以后,以20端口去连接客户端,建立一条新的链接并传输数据 被动模式 客户 ...
 - 45-Ubuntu-用户管理-10-chmod修改文件|目录权限
			
1.将a.py的权限修改为u=rwx, g=r-x, o=r--. 2.将目录test及子目录和文件权限修改为u=rwx, g=rwx, o=r-x.
 - 2019_7_30python
			
当6引号给予变量的时候,变为字符串 6引号注释多行 语言元素 python中大小写敏感 不要和关键字 print( a + b ) print( a - b ) print( a * b ) prin ...
 - pip3 常用操作
			
清华大学pip镜像 https://mirrors.tuna.tsinghua.edu.cn/help/pypi/ # 设置为默认 pip install pip -U pip config set ...