题目大意:有一个$n$个点,$m$条有向边的图,有$q$组询问。

每次询问:从$a$到$b$,经过不超过$c$条边,且依次经过的边边权递增,问最短路为多少,无解输出-1。

数据范围:$n≤150$,$m≤5000$,$q≤1000$

我场上并没有去想正解,打了个spfa居然获得$90pts$好成绩。

首先对于经过不超过$c$条边,当$c>n-1$时,是没有意义的(显然经过边数不会超过$n-1$),这种情况下我们直接将$c$赋值为$n-1$即可。

我们设$dis[i][j]$表示从$a$出发,经过不超过j条边后到达i的最短距离。

答案显然为$\min\limits_{i=1}^{c}dis[b][i]$。

考虑如何满足要求的边权递增:我们显然只需要把这些边从小到大排个序,然后从小到大拿出,丢去增广即可。

单次查询的复杂度显然是$O(mc)$的,上限显然是$O(nm)$。

那么,总时间复杂度为$O(m\log\ m+qnm)$。

 #include<bits/stdc++.h>
#define N 155
#define M 5005
#define INF 16843009
using namespace std; struct edge{
int u,v,w;
void rd(){scanf("%d%d%d",&u,&v,&w);}
friend bool operator <(edge a,edge b){return a.w<b.w;}
}a[M];
int n,m,Q; int dis[N][N]={};
void spfa(int A,int b,int c){
memset(dis,,sizeof(dis));
dis[A][]=;
c=min(c,n);
for(int i=;i<=m;i++){
for(int j=;j<=c;j++)
dis[a[i].v][j]=min(dis[a[i].v][j],dis[a[i].u][j-]+a[i].w);
}
int minn=INF;
for(int i=;i<=c;i++) minn=min(minn,dis[b][i]);
if(minn==INF) minn=-;
printf("%d\n",minn);
} int main(){
scanf("%d%d%d",&n,&m,&Q);
for(int i=;i<=m;i++) a[i].rd();
sort(a+,a+m+);
while(Q){
int a,b,c; scanf("%d%d%d",&a,&b,&c);
spfa(a,b,c);
Q--;
}
}

【xsy2304】哈 最短路的更多相关文章

  1. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  2. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

  3. Sicily 1031: Campus (最短路)

    这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码 #include<bits/stdc++.h> #define MA ...

  4. 最短路(Floyd)

    关于最短的先记下了 Floyd算法: 1.比较精简准确的关于Floyd思想的表达:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设maz ...

  5. bzoj1266最短路+最小割

    本来写了spfa wa了 看到网上有人写Floyd过了 表示不开心 ̄へ ̄ 改成Floyd试试... 还是wa ヾ(。`Д´。)原来是建图错了(样例怎么过的) 结果T了 于是把Floyd改回spfa 还 ...

  6. HDU2433 BFS最短路

    Travel Time Limit: 10000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. 最短路(代码来源于kuangbin和百度)

    最短路 最短路有多种算法,常见的有一下几种:Dijstra.Floyd.Bellman-Ford,其中Dijstra和Bellman-Ford还有优化:Dijstra可以用优先队列(或者堆)优化,Be ...

  8. Javascript优化细节:短路表达式

    什么是短路表达式? 短路表达式:作为"&&"和"||"操作符的操作数表达式,这些表达式在进行求值时,只要最终的结果已经可以确定是真或假,求值过程 ...

  9. Python中三目计算符的正确用法及短路逻辑

    今天在看别人代码时看到这样一种写法, 感觉是个挺容易踩到的坑, 搞清楚后写出来备忘. 短路逻辑 Python中进行逻辑运算的时候, 默认采用的是一种叫做短路逻辑的运算规则. 名字是很形象的, 下面直接 ...

随机推荐

  1. springboot整合zookeeper

    在springboot中所有的整合都是以bean的形式注入对象,从数据库coon.redis conn.再到整合的zookeeper,依然是依照bean注入连接对象,通过zookeeper api对z ...

  2. MQ队列堵塞无法读取经验总结

    问题现象: 1号发生本地来帐队列无法读取消息的问题,导致来帐报文均无法正常处理. 原因分析: 应用系统没有修改或上包,昨天交易和消息读取还是一切正常,mbfe的状态也是正常,mq的状态正常,以上正常可 ...

  3. Could not GET 'https://dl.google.com/dl/android/maven2/com/android/tools/build/gradle/3.1.2/gradle-3

    参考 https://blog.csdn.net/verkery6/article/details/80797705

  4. 导出word文档 通过DocX组件

    根据DocX官方描述如下: In the application development process, it uses COM libraries and requires MS Word or ...

  5. Why is it called “armature” instead of “skeleton”? or perhaps “rig”?

    Great question, I’ve always assumed armature/skeleton to be the same thing, here’s a quote from an a ...

  6. 项目总结19:layui实现表格渲染、表格搜索、数据获取

    项目总结19:layui实现表格渲染.表格搜索.数据获取 1-参考资料:https://www.layui.com/demo/table/reload.html 2-本次总结的是layui的表格功能, ...

  7. [leetcode]90. Subsets II数组子集(有重)

    Given a collection of integers that might contain duplicates, nums, return all possible subsets (the ...

  8. JS同步与异步;

    JS的同步与异步 同步:代买从上往下的执行 异步:每个模块各执行各的,同时执行,互不干扰 四个异步事件:(1)定时器(2)ajax(3)时间的绑定(4)回调函数 现在用定时器来说一说setTimeOu ...

  9. logback log4j log4j2 性能实测

    logback log4j log4j2 性能实测 转载: https://blog.souche.com/logback-log4j-log4j2shi-ce/ 日志已经成为系统开发中不可或缺的一部 ...

  10. osg探究补充:Node::accept(NodeVisitor& nv)及NodeVisitor简介

    前言 在前几节中,我自己觉得讲的比较粗糙,因为实在是时间上不是很充足,今天我想弥补一下,希望不是亡羊补牢.我们在osgViewer::Viewer::eventTraversal()函数中经常看到这么 ...