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 ...
随机推荐
- 【转】仿Android 联系人SideBar排序,根据拼音A-Z字母快速导航,以及输入搜索条件过滤,显示姓名的文字图片
1.首先我们把这几个工具类拷贝到自己的项目中,这些都是很常见的类: CharacterParser –这是用来把中文转成拼音的工具类 PinyinComparator –拼音首字母的比 ...
- Codeforces 544E Remembering Strings 状压dp
题目链接 题意: 给定n个长度均为m的字符串 以下n行给出字符串 以下n*m的矩阵表示把相应的字母改动成其它字母的花费. 问: 对于一个字符串,若它是easy to remembering 当 它存在 ...
- PuTTY?Bash?Out了!!!终端应该这么玩~
由于语言的障碍,国内一直存在一个问题,就是新技术引入太慢.比如PuTTY,其实已停止维护N久了,但大部分人却仍然在用(包括之前的我).比如Bash,明知有那么多的问题,却一直没有什么想法,似乎Linu ...
- sed 批量替换多个文件里的某个字符/串
提示: 国际惯例使用前先备份 sed -i "s/a/b/g" `grep 'a' -rl ./`
- 新一代 PHP 加速插件 Zend Opcache <转>
注: 由于原链接已不存在, 所以我把图片重新整理了一下, 以便看起来更加直观 笔者注: 1> PHP 性能提升之 PHP NG => php next generation wiki ...
- JY02-HTML/CSS-京东01 定位是很粗暴的页面布局方法
1.学习重点 1. 独立完成开发前的准备工作 1.1 配置开发环境 已使用sublime,webstorm,,,vscode,ato,Hbuilder 1.2 建立项目文件 项目文件名/ css.js ...
- 使用<span>标签为文字设置单独样式
这一小节讲解<span>标签,我们对<em>.<strong>.<span>这三个标签进行一下总结: 1. <em>和<strong& ...
- [转]Delphi 控件属性和事件
常用[属性] Action:该属性是与组件关联的行为,允许应用程序集中响应用户命令 Anchors:与组件连接的窗体的位置点 Align:确定组件的对齐方式 AutoSize:确定组件是否自动调整其大 ...
- CSP内容安全策略
在浏览网页的过程中,尤其是移动端的网页,经常看到有很多无关的广告,其实大部分广告都是所在的网络劫持了网站响应的内容,并在其中植入了广告代码.为了防止这种情况发生,我们可以使用CSP来快速的阻止这种广告 ...
- (转载)图解Linux系统的系统架构
我以下图为基础,说明Linux的架构(architecture).(该图参考<Advanced Programming in Unix Environment>) 最内层是硬件,最外层是用 ...