HDU 6181 Two Paths
这是一道次短路的题
但是本题有两个坑
- 注意边权的范围,一定要在所有与距离有关的地方开 long long
- 本题所求的并不是次短路,而是与最短路不同的最短的路径,如果最短路不止一条,那么就输出最短路的长度
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN=400005;
long long init(){
long long rv=0,fh=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') fh=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
rv=(rv<<1)+(rv<<3)+c-'0';
c=getchar();
}
return rv*fh;
}
long long n,m,T,dis[MAXN],dis2[MAXN],head[MAXN],nume;
struct edge{
long long to,nxt,dis;
}e[MAXN];
void adde(int from,int to,int dis){
e[++nume].to=to;
e[nume].dis=dis;
e[nume].nxt=head[from];
head[from]=nume;
}
struct cmp{
bool operator()(const int &a,const int &b)const{
return dis[a]>dis[b];
}
};
void sec_dij(){
memset(dis,0x3f,sizeof(dis));
int cnt[MAXN];
memset(dis2,0x3f,sizeof(dis2));
memset(cnt,0,sizeof(cnt));
dis[1]=0;
priority_queue <int,vector<int>,cmp> q;
q.push(1);
while(!q.empty()){
int u=q.top();q.pop();
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(dis[v]>dis[u]+e[i].dis){
long long t=dis[v];
dis[v]=dis[u]+e[i].dis;
if(dis2[v]>t) dis2[v]=t;
q.push(v);
}else if(dis[v]<dis[u]+e[i].dis){
if(dis[u]+e[i].dis<dis2[v]){
dis2[v]=dis[u]+e[i].dis;
q.push(v);
}
}
if(dis2[v]>dis2[u]+e[i].dis){
dis2[v]=dis2[u]+e[i].dis;
q.push(v);
}
}
}
queue <int> qq;
qq.push(n);
bool f[MAXN];
memset(f,0,sizeof(f));
f[n]=1;
while(!qq.empty()){
int u=qq.front();qq.pop();
for(int i=head[u];i;i=e[i].nxt){
int v=e[i].to;
if(dis[u]==dis[v]+e[i].dis){
cnt[u]++;
if(!f[v]) qq.push(v);
f[v]=1;
}
}
}
bool flag = 0;
for(int i = 1; i <= n; i++) if(cnt[i] >= 2) {flag = 1;break;}
if(flag) cout<<dis[n]<<endl;
else cout<<dis2[n]<<endl;
}
int main(){
T=init();
while(T--){
memset(e,0,sizeof(e));
memset(head,0,sizeof(head));
nume=0;
n=init();m=init();
for(int i=1;i<=m;i++){
int u=init(),v=init(),di=init();
adde(u,v,di);
adde(v,u,di);
}
sec_dij();
}
return 0;
}
HDU 6181 Two Paths的更多相关文章
- 2017多校第10场 HDU 6181 Two Paths 次短路
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6181 题意:给一个图,求出次短路. 解法:我之前的模板不能解决这种图,就是最短路和次短路相等的情况,证 ...
- HDU - 6181 Two Paths(次短路)
题意:求次短路. 分析:关键是情况讨论. LL tmpd = x.d + e.dist; 以下情况对应的更新结果 1.tmpd(2) < 最短路(3) < 次短路(4)-------> ...
- 【hdu 6181】Two Paths
[链接]http://acm.hdu.edu.cn/showproblem.php?pid=6181 [题意] 让你求从1到n的次短路 [题解] 模板题; 因为点可以重复走; 则一定会有次短路. di ...
- HDU 6181:Two Paths(次短路)
Two Paths Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 153428/153428 K (Java/Others) Total S ...
- HDU 6181:Two Paths(A* + SPFA)
题目链接 题意 给出n个点m条边的无向图,求次短路. 思路 和 POJ 2449 类似,只不过大小要开成long long. #include <bits/stdc++.h> using ...
- HDU 6181 第k短路
Two Paths Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 153428/153428 K (Java/Others)Total ...
- hdu 4912 Paths on the tree(树链拆分+贪婪)
题目链接:hdu 4912 Paths on the tree 题目大意:给定一棵树,和若干个通道.要求尽量选出多的通道,而且两两通道不想交. 解题思路:用树链剖分求LCA,然后依据通道两端节点的LC ...
- hdu 3191 How Many Paths Are There (次短路径数)
How Many Paths Are There Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- 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 ...
随机推荐
- ubuntu配置服务器apache
在配置apache之前我们需要先配置好ubuntu中的网络,如果不太懂的话可以看看这我的这篇文章:配置ubuntu网络,里面详细的介绍了怎么配置ubuntu的网络. 1.安装apache服务器 sud ...
- 如何在vue中使用sass
使用sass,我们需要安装sass的依赖包 npm install --save-dev sass-loader //sass-loader依赖于node-sass npm install --sav ...
- MySQL时间差返回月个数
select PERIOD_DIFF(date_format(now(),'%Y%m'),date_format('2010-11-30','%Y%m')) 1. MySQL 为日期增加一个时间间隔: ...
- mybatis_SQL映射(1)
文章摘录自:http://blog.csdn.net/y172158950/article/details/17258377 1. select的映射 <select id="sele ...
- shopnc前台登陆不进去解决方法
安装好shopnc后,注册新用户成功,且登陆后提示登陆成功,但是一两秒后自动跳转回登陆页面,需要重新登陆问题 PHP写session不是自动起的,需要修改后才行,所以 找到PHP的php.ini配置文 ...
- [bx]和loop指令
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- word中批量转换字母数字为Times New Roman
通常撰写论文时,英文与中文的格式会区分开,但是一个个修改会比较费时,可以通过替换功能实现.此处以word2003为例. 1.选择 编辑→替换 界面.在“查找内容”文本框中输入"[0-9a-z ...
- web.xml 中CharacterEncodingFilter类的学习
过滤器配置 当前台JSP页面和JAVA代码中使用了不同的字符集进行编码的时候就会出现表单提交的数据或者上传/下载中文名称文件出现乱码的问题 //编码方式配置 <filter> <fi ...
- Android4.0新控件
谷歌在推出Android4.0的同时推出了一些新控件,Android4.0中最常用的新控件有下面5种. 1. Switch的使用 Switch顾名思义,就是开关的意思,有开和关两种状态. 当Swit ...
- Linux下passwd和shadow文件内容详解
一./etc/passwd /etc/passwd 文件是一个纯文本文件,每行采用了相同的格式: name:password:uid:gid:comment:home:shell name 用户登录名 ...