COJ 0579 4020求次短路的长度
4020求次短路的长度 |
难度级别:C; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B |
试题描述
|
在一个地图上共有N个路口(编号分别为1到N),R条道路(道路均可以双向通行)。问1号路口到N号路口的次短路长度是多少?次短路指的是比最短路长度长的次短的路径。同一条边可以经过多次。 |
输入
|
第一行包括两个整数N、R,接下来的R行,每行三个数x,y和m,表示第x号路口到第y号路口的距离是m。
|
输出
|
一个数,表示次短路的长度。
|
输入示例
|
4 4
1 2 100 2 4 200 3 4 100 2 3 250 |
输出示例
|
450
|
其他说明
|
数据范围:1<=N<=5000,1<=R<=100000,0<m<10000.
|
题解:
方法1:窝萌可以用A*跑k短路对吧?
方法2:注意到是次短路,就枚举绕的边更新答案就行。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
#include<cstring>
#define PAU putchar(' ')
#define ENT putchar('\n')
using namespace std;
const int maxn=+,maxm=+,inf=1e8;
struct ted{int x,y,w;ted*nxt;}adj[maxn<<],*fch[maxn],*ms=adj;
void add(int x,int y,int w){
*ms=(ted){x,y,w,fch[x]};fch[x]=ms++;*ms=(ted){y,x,w,fch[y]};fch[y]=ms++;return;
}
int n,m;queue<int>Q;
struct solver{
bool inq[maxn];int d[maxn];
void spfa(int S){
for(int i=;i<=n;i++)d[i]=inf,inq[i]=false;d[S]=;queue<int>Q;Q.push(S);
while(!Q.empty()){
int u=Q.front();Q.pop();inq[u]=false;
for(ted*e=fch[u];e;e=e->nxt){
int v=e->y;
if(d[v]>d[u]+e->w){
d[v]=d[u]+e->w;
if(!inq[v])Q.push(v),inq[v]=true;
}
}
}return;
}
}p1,p2;
inline int read(){
int x=,sig=;char ch=getchar();
for(;!isdigit(ch);ch=getchar())if(ch=='-')sig=;
for(;isdigit(ch);ch=getchar())x=*x+ch-'';
return sig?x:-x;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<)putchar('-'),x=-x;
int len=,buf[];while(x)buf[len++]=x%,x/=;
for(int i=len-;i>=;i--)putchar(buf[i]+'');return;
}
int ans=inf,midist;
void init(){
n=read();m=read();int x,y,w;
for(int i=;i<=m;i++){
x=read();y=read();w=read();add(x,y,w);
}
p1.spfa();p2.spfa(n);midist=p1.d[n];//write(midist);ENT;
return;
}
void work(){
int size=ms-adj-;
for(int i=;i<=size;i+=){
int u=adj[i].x,v=adj[i].y,w=adj[i].w;
int d1=p1.d[u]+w+p2.d[v],d2=p2.d[u]+w+p1.d[v];
if(d1!=midist)ans=min(ans,d1);
if(d2!=midist)ans=min(ans,d2);
}
return;
}
void print(){
write(ans);
return;
}
int main(){init();work();print();return ;}
COJ 0579 4020求次短路的长度的更多相关文章
- POJ 3463 有向图求次短路的长度及其方法数
题目大意: 希望求出走出最短路的方法总数,如果次短路只比最短路小1,那也是可取的 输出总的方法数 这里n个点,每个点有最短和次短两种长度 这里采取的是dijkstra的思想,相当于我们可以不断找到更新 ...
- hdu 3191 次短路的长度和个数
http://acm.hdu.edu.cn/showproblem.php?pid=3191 求次短路的长度和个数 相关分析在这里http://blog.csdn.net/u012774187/art ...
- HDU 1688 Sightseeing&HDU 3191 How Many Paths Are There(Dijkstra变形求次短路条数)
Sightseeing Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。
这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...
- BFS求最短路 Abbottt's Revenge UVa 816
本题的题意是输入起点,朝向和终点,求一条最短路径(多解时任意输出一个即可) 本题的主要代码是bfs求解,就是以下代码中的slove的主要部分,通过起点按照路径的长度来寻找最短路径,输出最先到终点的一系 ...
- poj 3463/hdu 1688 求次短路和最短路个数
http://poj.org/problem?id=3463 http://acm.hdu.edu.cn/showproblem.php?pid=1688 求出最短路的条数比最短路大1的次短路的条数和 ...
- hdu3191+hdu1688(求最短路和次短路条数,模板)
hdu3191题意:求出次短路的长度和条数 #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- 关于dijkstra求最短路(模板)
嗯.... dijkstra是求最短路的一种算法(废话,思维含量较低, 并且时间复杂度较为稳定,为O(n^2), 但是注意:!!!! 不能处理边权为负的情况(但SPFA可以 ...
- 【Dijkstra+邻接表求次短路】POJ Sightseeing 3463
Language: Default Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7766 Ac ...
随机推荐
- LVS图解 ---阿里
LVS在大规模网络环境中的应用 1. SLB总体架构 LVS本身是开源的,我们对它进行了多方面的改进,并且也已开源-https://github.com/alibaba/LVS. 接下 ...
- svcutil 生成代理类时的问题
如果有这个的xsd, group内嵌choice的结构: <xs:complexType name="CreateType"> <xs:sequen ...
- Java中的浅复制和深复制 Cloneable clone
先看一个简单案例 public class Test { public static void main(String args[]) { Student stu1 = new ...
- android requestWindowFeature使用详解
requestWindowFeature可以设置的值有: 1.DEFAULT_FEATURES:系统默认状态,一般不需要指定 2.FEATURE_CONTEXT_M ...
- js中的同步与异步
同步:提交后等待服务器的响应,接收服务器返回的数据后再执行下面的代码 异步:与上面相反,提交后继续执行下面的代码,而在后台继续监听,服务器响应后有程序做相应处理,异步的操作好处是不必等待服务器而 ...
- css sprint 生成工具 bg2css
今天需要改个css sprint,之前使用过一个工具蛮好使,但是就是想不起叫什么名字,网上搜了很久,才再次找到,原来是bg2css,今天记录下,以备以后不时之需. 下载地址:http://www.cs ...
- 移动页面缩放方法之(一)控制meta法
<!DOCTYPE HTML> <html lang="zh-cn"> <head> <meta http-equiv="Con ...
- C#实现发送邮件
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- Mac下配置node.js 和react-native
最近对JS挺感兴趣的,就琢磨着在mac上配置下环境学习学习,正巧看到了Facebook的react-native,顺便配置了一下. 安装Homebrew 终端输入: ruby -e "$(c ...
- C盘不能新建文件的问题解决办法
C盘不能新建文件的问题解决办法 主要症状: 1.C 盘文件不能修改2.C 盘不能新建文件3.总之就是只能读取不能,写入和修改这样对于平时操作造成了极其的不方便~~~复制文件到C 盘会提示:错误0×80 ...