题目大意:求次短路.

题目思路:由于可能存在重边的情况所以不能采用邻接矩阵储存图,我用了邻接表来存图。

由起点S到终点E的次短路可能由以下情况组成:

1.S到v点的次短路 + v到E的距离

2.S到v的最短路 +  v到E的距离

对于每个节点,我们分别采用dist1[],dist2[]储存起点到该节点最短路与次短路

次短路的更新条件应是:对于点u,在本轮松弛操作中若 当前的dist1[u]可以被更新,我们用d2来储存还未被更新的dist1[u]。

若满足:dist2[u]>d2 && d2<dist1[u]

则更新 dist2[u]。

吐槽:实际数据范围 和题目描述的不太一样……要开大一点

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#define MAXSIZE 500005
#define INF 0x3f3f3f3f
#define LL long long using namespace std; int ans,n,k,a[MAXSIZE],dist1[MAXSIZE],dist2[MAXSIZE],vis[MAXSIZE];
typedef pair<int, int>p;//p.second储存节点:u,p.frist储存s->u的当前最短距离 struct node
{
int u;
int v;
int w;
int next;
}G[MAXSIZE]; void Add(int u,int v,int w)
{
G[k].u=u;
G[k].v=v;
G[k].w=w;
G[k].next=a[u];
a[u]=k++;
} void dfs()
{
priority_queue<p,vector<p>,greater<p> > Q;
dist1[]=;
Q.push(p(,));
while(!Q.empty())
{
p k=Q.top();
Q.pop();
int u=k.second;
int d=k.first;
if(dist2[u] < d) //小优化:如果取出的不是最短距离就不再向下进行
continue;
for(int i=a[u];i!=-;i=G[i].next)
{
int v=G[i].v;
int d2=d+G[i].w;
if(dist1[v] > d2) //更新最短路
{
swap(dist1[v],d2);
Q.push(p(dist1[v],v));
}
if(dist2[v] > d2 && dist1[v]<d2)//更新次短路
{
dist2[v]=d2;
Q.push(p(dist2[v],v));
}
}
}
ans=dist2[n];
} void Init()
{
for(int i=;i<MAXSIZE;i++)
{
dist1[i]=INF;
dist2[i]=INF;
vis[i]=;
a[i]=-;
}
k=;
} int main()
{
int T,cns=,u,v,w,m;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
Init();
while(m--)
{
scanf("%d%d%d",&u,&v,&w);
Add(u,v,w);
Add(v,u,w);
}
dfs();
printf("Case %d: %d\n",cns++,ans);
}
return ;
}

Light oj 1099 - Not the Best 次短路的更多相关文章

  1. Light OJ 1316 A Wedding Party 最短路+状态压缩DP

    题目来源:Light OJ 1316 1316 - A Wedding Party 题意:和HDU 4284 差点儿相同 有一些商店 从起点到终点在走过尽量多商店的情况下求最短路 思路:首先预处理每两 ...

  2. Light OJ 1114 Easily Readable 字典树

    题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...

  3. Light OJ 1429 Assassin`s Creed (II) BFS+缩点+最小路径覆盖

    题目来源:Light OJ 1429 Assassin`s Creed (II) 题意:最少几个人走全然图 能够反复走 有向图 思路:假设是DAG图而且每一个点不能反复走 那么就是裸的最小路径覆盖 如 ...

  4. Light OJ 1406 Assassin`s Creed 减少国家DP+支撑点甚至通缩+最小路径覆盖

    标题来源:problem=1406">Light OJ 1406 Assassin`s Creed 意甲冠军:向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路: ...

  5. light oj 1007 Mathematically Hard (欧拉函数)

    题目地址:light oj 1007 第一发欧拉函数. 欧拉函数重要性质: 设a为N的质因数.若(N % a == 0 && (N / a) % a == 0) 则有E(N)=E(N ...

  6. Light OJ 1406 Assassin`s Creed 状态压缩DP+强连通缩点+最小路径覆盖

    题目来源:Light OJ 1406 Assassin`s Creed 题意:有向图 派出最少的人经过全部的城市 而且每一个人不能走别人走过的地方 思路:最少的的人能够走全然图 明显是最小路径覆盖问题 ...

  7. Light OJ 1288 Subsets Forming Perfect Squares 高斯消元求矩阵的秩

    题目来源:Light OJ 1288 Subsets Forming Perfect Squares 题意:给你n个数 选出一些数 他们的乘积是全然平方数 求有多少种方案 思路:每一个数分解因子 每隔 ...

  8. Jan's light oj 01--二分搜索篇

    碰到的一般题型:1.准确值二分查找,或者三分查找(类似二次函数的模型). 2.与计算几何相结合答案精度要求比较高的二分查找,有时与圆有关系时需要用到反三角函数利用 角度解题. 3.不好直接求解的一类计 ...

  9. Light OJ 1272 Maximum Subset Sum 高斯消元 最大XOR值

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/u011686226/article/details/32337735 题目来源:problem=12 ...

随机推荐

  1. js数组歌

    判断是不是数组,isArray最靠谱. 按照条件来判断,every/some给答案 是否包含此元素,includes最快速. find/findIndex很相似,按条件给第一个值. indexOf/l ...

  2. bigdata learning unit two--Spark environment setting

    1.下载 Spark安装之前的准备 文件的解压与改名 tar -zxvf spark-2.2.0-bin-hadoop2.7.tgz rm -rf spark-2.2.0-bin-hadoop2.7. ...

  3. linux基本

    一.初识 Linux与windows相比的优点是:长期稳定的运行,避免了因为系统的问题导致的项目运行中断:占用资源少:开源软件多. Centos(Community Enterprise Operat ...

  4. sys用户的操作

    oracle中查找某个表属于哪个用户? select owner from dba_tables where table_name=upper('t_l_tradelist' )          1 ...

  5. linux对4T硬盘进行分区

    使用parted工具: yum install parted parted /dev/sdb //选择硬盘 GNUParted 2.3Using /dev/sdbWelcome to GNU Part ...

  6. 【XShell】xshell评估过期解决办法

    1.登录网景官网的下载页面: 官网:https://www.netsarang.com/download/down_form.html?code=522 2.填写基本信息 licensetype 必须 ...

  7. MyBatis-Plugins 的创建流程与执行顺序

    一.插件的解析,所有插件都会被添加到 InterceptorChain 类中,用于后续处理 org.apache.ibatis.builder.xml.XMLConfigBuilder private ...

  8. CentOS7 下 Hadoop 分布式部署

    Hadoop 服务划分 使用三台节点,集群部署规划如下 服务\主机 hadoop1 hadoop2 hadoop3 HDFS NameNode DataNode DataNode SecondaryN ...

  9. 6、JPA-映射-单向一对多

    一个用户对应多个订单 实体类 Customer package com.jpa.yingshe; import javax.persistence.*; import java.util.HashSe ...

  10. ruby select 方法,可用于先查询结果后,再次用条件限制

    1. 用于条件过滤 @works=DworkPro.all.order(:work_type) @work_pro=@works.select{ |x| x.job_type == 7} 2. sel ...