算法训练 最短路  
时间限制:1.0s   内存限制:256.0MB
      
问题描述

给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证没有负环)。请你计算从1号点到其他点的最短路(顶点从1到n编号)。

输入格式

第一行两个整数n, m。

接下来的m行,每行有三个整数u, v, l,表示u到v有一条长度为l的边。

输出格式
共n-1行,第i行表示1号点到i+1号点的最短路。
样例输入
3 3
1 2 -1
2 3 -1
3 1 2
样例输出
-1
-2
数据规模与约定

对于10%的数据,n = 2,m = 2。

对于30%的数据,n <= 5,m <= 10。

对于100%的数据,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保证从任意顶点都能到达其他所有顶点。

提示: 下面的代码只有70分,超时了!

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner; import javax.management.Query; public class Main {
public static Scanner cin = new Scanner(System.in);
public static ArrayList[] v1 = new ArrayList[20005];//v1[i]表示从i到达的点
public static ArrayList[] v2 = new ArrayList[20005];//v1对应路径的权值
public static int visit[] = new int[20005];
public static int d[] = new int[20005];
public static int n, m; public static void main(String[] args) {
// TODO Auto-generated method stub
n = cin.nextInt();
m = cin.nextInt();
//初始化链表
for(int i = 1; i <= n; i++) {
v1[i] = new ArrayList();
v2[i] = new ArrayList();
}
int a, b, l;
for(int i = 0; i < m; i++) {
a = cin.nextInt();
b = cin.nextInt();
l = cin.nextInt();
v1[a].add(b); //有向图
v2[a].add(l);
}
spfa(1);
for(int i = 2; i <= n; i++) {
System.out.println(d[i]);
}
} public static void spfa(int s) {
for(int i = 1; i <= n; i++) {
d[i] = 0x3f3f3f3f;
}
d[s] = 0;
visit[s] = 1;
int[] num = new int[20005];
Queue<Integer> mq = new LinkedList<>();
mq.add(s);
num[s] = 1;
while(!mq.isEmpty()) {
int x = mq.peek();
mq.poll();
visit[x] = 0;
int ln = v1[x].size();
for(int i = 0; i < ln; i++) {
int v = (int) v1[x].get(i);
int len = (int) v2[x].get(i);
if(d[v] > d[x] + len) {
d[v] = d[x] + len;
if(visit[v] == 0) {
mq.add(v);
visit[v] = 1;
// num[v]++;
// if(num[v] > n)
// return;
}
}
}
}
} }

  

30-算法训练 最短路 spfa的更多相关文章

  1. 蓝桥杯 算法训练 最短路 [ 最短路 bellman ]

    传送门   算法训练 最短路   时间限制:1.0s   内存限制:256.0MB     锦囊1   锦囊2   锦囊3   问题描述 给定一个n个顶点,m条边的有向图(其中某些边权可能为负,但保证 ...

  2. 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)

    关于几个的区别和联系:http://www.cnblogs.com/zswbky/p/5432353.html d.每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个(草儿家到 ...

  3. [ACM] 最短路算法整理(bellman_ford , SPFA , floyed , dijkstra 思想,步骤及模板)

    以杭电2544题目为例 最短路 Problem Description 在每年的校赛里,全部进入决赛的同学都会获得一件非常美丽的t-shirt. 可是每当我们的工作人员把上百件的衣服从商店运回到赛场的 ...

  4. 图论算法(三) 最短路SPFA算法

    我可能要退役了…… 退役之前,写一篇和我一样悲惨的算法:SPFA 最短路算法(二)SPFA算法 Part 1:SPFA算法是什么 其实呢,SPFA算法只是在天朝大陆OIers的称呼,它的正统名字叫做: ...

  5. ALGO-5_蓝桥杯_算法训练_最短路

    记: 一开始没接触过关于最短距离的算法,便开始翻阅关于图的知识, 得知关于最短距离的算法有Dijkstra算法(堆优化暂未看懂),Bellman-Ford算法,Floyd算法,SPFA算法. 由于数据 ...

  6. 单源最短路——SPFA算法(Bellman-Ford算法队列优化)

    spfa的算法思想(动态逼近法):     设立一个先进先出的队列q用来保存待优化的结点,优化时每次取出队首结点u,并且用u点当前的最短路径估计值对离开u点所指向的结点v进行松弛操作,如果v点的最短路 ...

  7. Java实现 蓝桥杯 算法训练 Remember the A La Mode(暴力)

    试题 算法训练 Remember the A La Mode 问题描述 Hugh Samston经营着一个为今年的ICPC世界总决赛的参与者提供甜点的餐饮服务.他将会提供上面有冰激凌的饼片.为了满足不 ...

  8. 蓝桥杯 算法训练 区间k大数查询(水题)

    算法训练 区间k大数查询 时间限制:1.0s   内存限制:256.0MB 问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个. 输入格式 第一行包含一个数n,表示序列长度. ...

  9. 算法训练 区间k大数查询

    http://lx.lanqiao.org/problem.page?gpid=T11 算法训练 区间k大数查询   时间限制:1.0s   内存限制:256.0MB        问题描述 给定一个 ...

随机推荐

  1. Java学习路线(转)

    原文:http://www.hollischuang.com/archives/489 一.基础篇 1.1 JVM 1.1.1. Java内存模型,Java内存管理,Java堆和栈,垃圾回收 http ...

  2. PHP对redis操作详解

    /*1.Connection*/$redis = new Redis();$redis->connect('127.0.0.1',6379,1);//短链接,本地host,端口为6379,超过1 ...

  3. Haskell语言学习笔记(79)lambda演算

    lambda演算 根据维基百科,lambda演算(英语:lambda calculus,λ-calculus)是一套从数学逻辑中发展,以变量绑定和替换的规则,来研究函数如何抽象化定义.函数如何被应用以 ...

  4. Java动态代理的两种实现方法

    注:文章转载自:https://blog.csdn.net/m0_38039437/article/details/77970633 一.代理的概念 动态代理技术是整个java技术中最重要的一个技术, ...

  5. Unity系列文章

    1.IoC模式:http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html  这篇博客是通过一个播放器的例子来说明什么是依赖,依赖倒置,控 ...

  6. vue项目动态控制数据变动时箭头样式

    html代码 <div class="top_precent"> <span :class="{arrow:numPrecent<0}" ...

  7. 自定义 mapper的实现

    json格式,要想好看直接百度,json,将字符放进去就可 一步:将mapper复制一份,名字加一个Custom自定义 二步:mpper.xml也是一样,设置里面的namespace映射关系 自定义m ...

  8. Java学习02 (第一遍)

    巩固基础: byte 1个字节 -128到127 = 2^(字节数*8-1),转变2进制,01111111(负127)到11111111(正127) ,存在正负零(00000000),正零保留,负零补 ...

  9. redmine安装-BitNami 提供的一键安装程序

    redmine安装-BitNami 提供的一键安装程序          博客分类: REDMINE redmine安装redmine一键安装bitNami redmine  BitNami 提供re ...

  10. jquery iframe父子框架中的元素访问方法

    在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素 1. 格式:window. ...