HDU1688-POJ3463-Sightseeing(求次短路的条数)
题意
求出最短路和次短路的条数,当次短路比最短路长度小1时,输出条数之和,反之输出最短路条数。
题解
dis1[],cnt1[],dis2[],cnt2[] 分别表示最短路的长度和条数,次短路的长度和条数。
当当前距离小于当前点最短路长度的时候,更新二者长度和条数。
当当前距离等于当前点最短路长度的时候,更新最短路条数。
当当前距离小于当前点次短路长度的时候,更新次短路的长度和条数。
当当前距离等于当前点次短路长度的时候,更新次短路的条数。
push进队列的时候要标注push进去的是最短路还是次短路。
C++代码
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; #define endl "\n" typedef long long ll;
const int maxn = 1e5 + ;
const int INF = << ; struct edge{
int to ,nxt,w;
}e[maxn]; int n , m ; int vis[maxn][];
int d[maxn][],dp[maxn][];
int head[maxn],cnt; void init(){
cnt = ;
memset(head,-,sizeof head);
} void add_edge(int u,int v,int w){
e[cnt].to = v;
e[cnt].nxt = head[u];
e[cnt].w = w;
head[u] = cnt++;
} void dijstra(int s, int ee){
for(int i = ;i <= n ; i++)
d[i][] = d[i][] = INF;
memset(vis,,sizeof vis);
memset(dp,,sizeof dp);
d[s][] = ;
dp[s][] = ;
while(){
int maxn = INF;
int v ,flag;
for(int j = ;j <= n ;j ++){
if(!vis[j][] && maxn > d[j][]){
maxn = d[j][];
v = j;
flag = ;
}
else if(!vis[j][] && maxn > d[j][]){
maxn = d[j][];
v = j;
flag = ;
}
}
if(v == ee && flag == ) break;
if(maxn == INF) break;
vis[v][flag] = ;
for(int u = head[v]; ~u; u = e[u].nxt){
int j = e[u].to,w = e[u].w;
if(!vis[j][] && d[v][flag] + w < d[j][]){
d[j][] = d[j][];
d[j][] = d[v][flag] + w;
dp[j][] = dp[j][];
dp[j][] = dp[v][flag];
}else if(!vis[j][] && d[v][flag] + w == d[j][]){
dp[j][] += dp[v][flag] ;
}else if(!vis[j][] && d[v][flag] + w < d[j][]){
d[j][] = d[v][flag] + w;
dp[j][] = dp[v][flag];
}else if(!vis[j][] && d[v][flag] + w == d[j][])
dp[j][] += dp[v][flag];
//cout << dp[j][1] << " " << dp[j][0] << endl;
}
}
} int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
int s ,ee ,t;
int x, y , w;
cin >> t;
while(t--){
cin >> n >> m;
init();
for(int i = ;i < m ; i++){
cin >> x >> y >> w;
add_edge(x,y,w);
}
cin >> s >> ee;
dijstra(s,ee);
if(d[ee][] + == d[ee][])
cout << dp[ee][] + dp[ee][] << endl;
else
cout << dp[ee][] << endl;
}
return ;
}
HDU1688-POJ3463-Sightseeing(求次短路的条数)的更多相关文章
- HDU 3416 Marriage Match IV (求最短路的条数,最大流)
Marriage Match IV 题目链接: http://acm.hust.edu.cn/vjudge/contest/122685#problem/Q Description Do not si ...
- [POJ3463] Sightseeing(次短路 Heap + Dijkstra)
传送门 用dijkstra比较好,spfa可能有的重复 dis[x][2]:dis[x][0]表示起点到x的最短路.dis[x][1]表示起点到x的次短路: tot[x][2]:tot[x][0]表示 ...
- POJ---3463 Sightseeing 记录最短路和次短路的条数
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9247 Accepted: 3242 Descr ...
- 最短路和次短路的条数(dijstra算法或spfa算法)POJ3463
http://poj.org/problem?id=3463 Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissio ...
- Sightseeing(dijlstar) 计算最短路和次短路的条数
Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10004 Accepted: 3523 Desc ...
- SUSTOJ_路痴的单身小涵(图中最短路的条数)
去年因为太low没有做出来校赛的最后一题,遂今年校赛做了这个题,下面我做详细描述. 原题链接 本题大意:给定一个无向图G,每个边的权值为1,图中L表示起点,C表示终点,#表示未通路,给定时间k,让你判 ...
- hdu3191+hdu1688(求最短路和次短路条数,模板)
hdu3191题意:求出次短路的长度和条数 #include<iostream> #include<cstdio> #include<cstring> #inclu ...
- 【Dijkstra+邻接表求次短路】POJ Sightseeing 3463
Language: Default Sightseeing Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7766 Ac ...
- HDU 1688 Sightseeing 【输出最短路+次短路条数】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1688 题目大意:给n个点,m条有向边.再给出起点s, 终点t.求出s到t的最短路条数+次短路条数. 思 ...
随机推荐
- Spring Cloud架构教程 (一)Hystrix监控面板
下面我们基于之前的示例来结合Hystrix Dashboard实现Hystrix指标数据的可视化面板,这里我们将用到下之前实现的几个应用,包括: eureka-server:服务注册中心 eureka ...
- 常用的vi快捷方式
一般情况来说: 0代表行首,$代表行末 $,G代表最后一行 光标移动 0 移动到本行最前面 $ 移动到本行最后 G 移动文件最后一行 nG 移动到文件第n行 gg 移动到文件第一行 n[space]移 ...
- python面向对象之设计模式
概念: 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经过分类的.代码设计经验的总结.使用设计模式的目的:为了代码可重用性.让代码更容易被他人理解.保证代码可靠性. 设计 ...
- 一款基于jQuery的漂亮弹出层
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Mac OS下Flutter环境搭建记录,VS Code开发
安装Flutter 获取FlutterSDK 终端cd进入SDK安装目录,比如 cd ~/FlutterSDK 由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时 ...
- SVN更新报错:Checksum mismatch for ……
问题: Checksum mismatch while updating '……'; expected: '3f9fd4dd7d1a0304d8020f73300a3e07', actual: 'cd ...
- 什么是HOOK功能?
HOOK API是一个永恒的话题,如果没有HOOK,许多技术将很难实现,也许根本不能实现.这里所说的API,是广义上的API,它包括DOS下的中断,WINDOWS里的API.中断服务.IFS和NDIS ...
- iOS SDK开发之 .framework静态库
查看.a静态库的生成及使用单击此处 注:这篇教程将只使用一小部分Objective-C代码,本文主要讲解从开始到应用的详细步骤.环境:xcode 9.2下面我们开始操作: 第一步:创建一个静态库工程 ...
- Python基本语法_变量作用域LEGB
目录 目录 软件系统 变量的作用域 高级语言对数据类型的使用过程 作用域的产生 作用域的类型 Llocal局部作用域 Eenclosing嵌套作用域 Gglobal全局作用域 Bbuilt-in内置作 ...
- Jmeter之简单控制器
在很多情况下,我们 需要将多个请求放置在一起,但是没有逻辑上的操作,这个时候就可以使用简单控制器了. 如 :