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的最短路条数+次短路条数. 思 ...
随机推荐
- springboot(11)使用SpringBoot validator进行数据验证
简介: 数据验证是作为一个企业级项目架构上设计的最基础的模块,前辈们曾说过:界面上传递到后台的数据没有百分之百值得相信的!为什么这么说呢?往往我们在编写程序的时候都会感觉后台的验证无关紧要,这样就会给 ...
- node.js入门学习(三)--npm
一.npm介绍 1)npm:node package manager是node.js默认的以js编写的软件包管理系统 官网:www.npmjs.com 文档:docs.npmjs.com 2)提到np ...
- AtCoder AGC002E Candy Piles (博弈论)
神仙题..表示自己智商不够想不到... 好几次读成最后拿的赢了,导致一直没看懂题解... 题目链接: https://atcoder.jp/contests/agc002/tasks/agc002_e ...
- ELK5+redhat7.4配置elasticsearch集群
ELK介绍 ELK是三个开源软件的缩写,即elasticsearch.logstack.kibana. Elasticsearch:开源分布式搜索引擎,提供搜集.分析.存储数据三大功能.它的特点有:分 ...
- 基于thinkphp开发的项目部署到由宝塔面板创建的LNMP服务器上解决路径出错问题
一. 环境与版本: 主机:amazon aws EC2主机 系统:Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1039-aws x86_64) 面板:宝塔免费版 6.9. ...
- react注
创建新项目: npm create-react-app test1 运行项目:npm start
- leetcode-mid-sorting and searching-75. Sort Colors-NO
mycode 97.95% class Solution(object): def sortColors(self, nums): """ :type nums: L ...
- loj#6038 「雅礼集训 2017 Day5」远行
分析 代码 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define ...
- c语言中static关键字用法详解
个人总结: 1.C不是面向对象的,在c中static修饰的变量或函数仅在当前文件中使用 2.C可以对局部变量使用static修饰(注意面向对象的java则不行),其放在全局区一直存在 概述static ...
- 在windows下使用Mingw搭建模拟Linux
1.到官网下载最新版Mingw 2.点击安装,最好选择默认路径,如果不是的话,路径中一定不能有空格. 3.选择安装,mingw-developer-toolkit.mingw32-base.mingw ...