hdu 1688 Sightseeing
http://acm.hdu.edu.cn/showproblem.php?pid=1688
这道题就是求最短路路径和次短路路径的条数。
用一个二维数组记录每一个节点距离起始点的最短距离和次短距离,再开一个二维数组记录路径数
更新状态时:
1)新值小于最短路径长:更新最短路径长,计数;次短路径长,计数
2)新值等于最短路径长:更新最短路径计数
3)新值大于最短路径长,小于次短路径长:更新次短路径长,计数
4)新值等于次短路径长:更新次短路径计数
1 #include <cstdio> 2 #include <cstring> 3 #include <vector> 4 #include <queue> 5 #include <algorithm> 6 #define maxn 2000 7 using namespace std; 8 const int inf=1<<30; 9 struct edge 10 { 11 int v,w; 12 }; 13 14 struct node 15 { 16 int d,v; 17 int mark; 18 bool operator < (const node &a)const 19 { 20 if(d!=a.d) 21 return d>a.d; 22 return v>a.v; 23 } 24 }; 25 26 vector<edge>edges[maxn]; 27 int dis[maxn][3]; 28 int vis[maxn][3]; 29 int path[maxn][3]; 30 int n,m,a,b,c,s1,f; 31 node st; 32 33 34 void inti() 35 { 36 for(int i=0; i<=n; i++) 37 { 38 dis[i][1]=dis[i][2]=inf; 39 } 40 memset(path,0,sizeof(path)); 41 memset(vis,false,sizeof(vis)); 42 } 43 44 void dijkstra(int s,int e) 45 { 46 inti(); 47 priority_queue<node>q; 48 dis[s][1]=0; 49 path[s][1]=1; 50 memset(vis,false,sizeof(vis)); 51 st.d=0; st.v=s; 52 st.mark=1; 53 q.push(st); 54 while(!q.empty()) 55 { 56 node st1=q.top(); q.pop(); 57 if(vis[st1.v][st1.mark]) continue; 58 vis[st1.v][st1.mark]=true; 59 for(int i=0; i<(int)edges[st1.v].size(); i++) 60 { 61 int v1=edges[st1.v][i].v; 62 int w1=edges[st1.v][i].w; 63 if(!vis[v1][1]&&st1.d+w1<dis[v1][1]) 64 { 65 if(dis[v1][1]!=inf) 66 { 67 dis[v1][2]=dis[v1][1]; 68 path[v1][2]=path[v1][1]; 69 st.d=dis[v1][2]; st.v=v1; st.mark=2; 70 q.push(st); 71 } 72 dis[v1][1]=st1.d+w1; 73 path[v1][1]=path[st1.v][st1.mark]; 74 st.v=v1; st.mark=1; st.d=dis[v1][1]; 75 q.push(st); 76 } 77 else if(!vis[v1][1]&&st1.d+w1==dis[v1][1]) 78 { 79 path[v1][1]+=path[st1.v][st1.mark]; 80 } 81 else if(!vis[v1][2]&&st1.d+w1<dis[v1][2]) 82 { 83 dis[v1][2]=st1.d+w1; 84 path[v1][2]=path[st1.v][st1.mark]; 85 st.d=dis[v1][2]; st.v=v1; st.mark=2; 86 q.push(st); 87 } 88 else if(!vis[v1][2]&&st1.d+w1==dis[v1][2]) 89 { 90 path[v1][2]+=path[st1.v][st1.mark]; 91 } 92 } 93 } 94 } 95 96 int main() 97 { 98 int t; 99 scanf("%d",&t); 100 while(t--) 101 { 102 scanf("%d%d",&n,&m); 103 inti(); 104 for(int i=0; i<=n; i++) edges[i].clear(); 105 for(int i=0; i<m; i++) 106 { 107 scanf("%d%d%d",&a,&b,&c); 108 edge m1; m1.v=b; m1.w=c; 109 edges[a].push_back(m1); 110 } 111 scanf("%d%d",&s1,&f); 112 dijkstra(s1,f); 113 if(dis[f][1]+1==dis[f][2]) 114 { 115 printf("%d\n",path[f][1]+path[f][2]); 116 } 117 else 118 printf("%d\n",path[f][1]); 119 } 120 return 0; 121 }
View Code
转载于:https://www.cnblogs.com/fanminghui/p/3712202.html
hdu 1688 Sightseeing相关推荐
- 杭电OJ分类题目(4)-Graph
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(4) HDU Graph Theory - U ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自--http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- 【HDOJ图论题集】【转】
1 =============================以下是最小生成树+并查集====================================== 2 [HDU] 3 1213 How ...
- 一系列图论问题[转]
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Many ...
- kk_想要学习的知识
2018/4/27 计算几何 一.简介 计算几何属于ACM算法中比较冷门的分类,在省赛中只在前几年考察过,这两年还没有考过,而且和高精度计算一样,遇到题目主要靠套模板,因此对题意的理解至关重要,而且往 ...
- 图论练习题(存起来练)
=============================以下是最小生成树+并查集====================================== [HDU] 1213 How Man ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
- 最短路径问题经典题目汇总
50道数据结构最短路径问题 HDU 1142 http://acm.hdu.edu.cn/showproblem.php?pid=1142 HDU 1217 http://acm.hdu.edu.cn ...
- HDU题目分类大全【大集合】
基础题: 1000.1001.1004.1005.1008.1012.1013.1014.1017.1019.1021.1028.1029. 1032.1037.1040.1048.1056.105 ...
最新文章
- TCP与UDP区别小结
- 【转】使用Apache CXF开发WebServices服务端
- Caffe学习系列(22):caffe图形化操作工具digits运行实例
- spring boot中servlet启动原理
- php图片制作源码,php进行图片裁剪及生成缩略图程序源代码
- java 自动生成mybatis文件_如何自动生成Mybatis的Mapper文件详解
- iPhone 7 P适合什么系统?
- [转载]JAVA操作符
- CSV 文件打开乱码?如何批量解决 CSV 文件乱码问题
- 已解决-电脑端HP Scan扫描无反应无法扫描
- 20210327“泰迪杯数据挖掘大赛”csv模块使用记录
- win10无法装载重装系统iso文件_win10镜像不能安装系统如何解决_win10镜像无法安装处理方法...
- 斯皮尔曼相关系数范围_Spearman Rank(斯皮尔曼等级)相关系数及MATLAB实现
- 趋势性、季节性、周期性
- 【OpenCV】图片几何特征提取
- 回首过去 展望未来
- 用ado把excel数据写入oracle,如何将excel表格数据导入到oracle数据库对应的表中?!oracle导出excel文件...
- Python·@property属性
- Zabbix监控web基本配置
- np.log1p()取对数符合正态分布
热门文章
- Ubuntu 下编译ffmpeg和x264解编码器(翻译的一篇文章:)
- CodeSmith实用技巧(十四):使用Progress对象
- java random构造方法_Java中的Random()函数及两种构造方法
- 人工智能写的散文之白色月光下
- QQ第三方登录报错error=-1
- Unable to find remote helper for 'https'解决办法
- EMC virtual provisining and fast vp
- 基于数组的无锁队列(译)
- [转]PHP--优化PHP代码建议
- 你有没有成为技术作家的潜力