Jimmy experiences a lot of stress at work these days, especially since his accident made working difficult. To relax after a hard day, he likes to walk home. To make things even nicer, his office is on one side of a forest, and his house is on the other. A nice walk through the forest, seeing the birds and chipmunks is quite enjoyable.
The forest is beautiful, and Jimmy wants to take a different route everyday. He also wants to get home before dark, so he always takes a path to make progress towards his house. He considers taking a path from A to B to be progress if there exists a route from B to his home that is shorter than any possible route from A. Calculate how many different routes through the forest Jimmy might take.
Input

Input contains several test cases followed by a line containing 0. Jimmy has numbered each intersection or joining of paths starting with 1. His office is numbered 1, and his house is numbered 2. The first line of each test case gives the number of intersections N, 1 < N ≤ 1000, and the number of paths M. The following M lines each contain a pair of intersections a b and an integer distance 1 ≤ d ≤ 1000000 indicating a path of length d between intersection a and a different intersection b. Jimmy may walk a path any direction he chooses. There is at most one path between any pair of intersections.
Output

For each test case, output a single integer indicating the number of different routes through the forest. You may assume that this number does not exceed 2147483647
Sample Input

  1. 5 6
  2. 1 3 2
  3. 1 4 2
  4. 3 4 3
  5. 1 5 12
  6. 4 2 34
  7. 5 2 24
  8. 7 8
  9. 1 3 1
  10. 1 4 1
  11. 3 7 1
  12. 7 4 1
  13. 7 5 1
  14. 6 7 1
  15. 5 2 1
  16. 6 2 1
  17. 0

Sample Output

  1. 2
  2. 4
  3.  
  4. 题意: 给你一个图,找路。但是有个的条件:每走一步,如你选择要走a b (如果a,b之间有路),那么必须保证a到终点的所有路 都小于 b到终点的每一条路。问满足这样的路径条数 有多少
    思路:
      1. 1为起点,2为终点,因为要走ab路时,必须保证那个条件,所以从终点开始使用单源最短路Dijkstra算法,得到每个点到终点的最短路,保存在dis[]数组中。
    2. 然后从起点开始深搜每条路,看看满足题意的路径有多少条。
      3. 这样搜索之后,dp[1]就是从起点到终点所有满足题意的路径的条数。
  1. #include <iostream>
  2. #include <string.h>
  3. using namespace std;
  4. const int MAXN = ;
  5. const int INF = ;
  6. int n, m;
  7. int vis[MAXN];
  8. int g[MAXN][MAXN];
  9. int dis[MAXN];
  10. int dp[MAXN];
  11.  
  12. void init(){
  13. for(int i = ; i <= n; i++){
  14. for(int j = ; j <= n; j++){
  15. if(i == j)
  16. g[i][j] = ;
  17. else g[i][j] = INF;
  18. }
  19. }
  20. memset(vis,,sizeof(vis));
  21. memset(dp,-,sizeof(dp));
  22. }
  23.  
  24. void dij(int v0){
  25. int pos = v0;
  26. for(int i = ; i <= n; i++){
  27. dis[i] = g[v0][i];
  28. }
  29. vis[pos] = ;
  30. for(int i = ; i < n; i++){
  31. int mins = INF;
  32. for(int j = ; j <= n; j++){
  33. if(!vis[j] && dis[j] < mins){
  34. pos = j;
  35. mins = dis[j];
  36. }
  37. }
  38. vis[pos] = ;
  39. for(int j = ; j <= n; j++){
  40. if(!vis[j] && dis[j] > dis[pos] + g[pos][j])
  41. dis[j] = dis[pos] + g[pos][j];
  42. }
  43. }
  44. }
  45.  
  46. int dfs(int start){
  47. int ans = ;
  48. if(dp[start] != -)
  49. return dp[start];
  50. if(start == )
  51. return ;
  52. for(int i = ; i <= n; i++){
  53. if(g[start][i] != INF && dis[start] > dis[i])
  54. ans += dfs(i);
  55. }
  56. dp[start] = ans;
  57. return dp[start];
  58. }
  59.  
  60. int main(){
  61. while(cin >> n && n){
  62. init();
  63. cin >> m;
  64. for(int i = ; i <= m; i++){
  65. int a, b, w;
  66. cin >> a >> b >> w;
  67. g[a][b] = g[b][a] = w;
  68. }
  69. dij();
  70. cout << dfs() << endl;
  71. }
  72. }

HDU_1142(最短路 + dfs)的更多相关文章

  1. 题目1539:师弟 ——最短路+DFS

    题意::从起点到终点的所有的最短路中,找出离终点有X个路口的城市一共有几个 开始我用最短路+DFS从起点开始搜,超时了 换了一种方法,从终点开始搜,AC #include<stdio.h> ...

  2. HDU 1142 A Walk Through the Forest(最短路+dfs搜索)

    A Walk Through the Forest Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Jav ...

  3. PAT-1111 Online Map (30分) 最短路+dfs

    明天就要考PAT,为了应付期末已经好久没有刷题了啊啊啊啊,今天开了一道最短路,状态不是很好 1.没有读清题目要求,或者说没有读完题目,明天一定要注意 2.vis初始化的时候从1初始化到n,应该从0开始 ...

  4. Let‘s play computer game(最短路 + dfs找出所有确定长度的最短路)

    Let's play computer game Description xxxxxxxxx在疫情期间迷上了一款游戏,这个游戏一共有nnn个地点(编号为1--n1--n1--n),他每次从一个地点移动 ...

  5. cf1051F. The Shortest Statement(最短路/dfs树)

    You are given a weighed undirected connected graph, consisting of nn vertices and mm edges. You shou ...

  6. PAT1018——最短路加DFS

    http://pat.zju.edu.cn/contests/pat-a-practise/1018 在杭州各个点,有很多自助自行车的点,最大容纳点为CMAX,但比较适合的情况是CMAX/2, 现在从 ...

  7. 【转】最短路&差分约束题集

    转自:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548 A strange lift基础最短路(或bfs)★254 ...

  8. 【CF173B】Chamber of Secrets(二分图,最短路)

    题意:给你一个n*m的地图,现在有一束激光从左上角往右边射出,每遇到‘#’,你可以选择光线往四个方向射出,或者什么都不做,问最少需要多少个‘#’往四个方向射出才能使关系在n行往右边射出. 思路:将每一 ...

  9. 转载 - 最短路&差分约束题集

    出处:http://blog.csdn.net/shahdza/article/details/7779273 最短路 [HDU] 1548    A strange lift基础最短路(或bfs)★ ...

随机推荐

  1. tf.pad(one_hot_encoding, [[0, 0], [1, 0]], mode='CONSTANT')

    tf.pad(one_hot_encoding, [[0, 0], [1, 0]], mode='CONSTANT') tf.pad 是扩展的意思,其中[0, 0], [1, 0] 分别代表的是[上, ...

  2. ADO.Net 数据库修改

    数据库的修改方法和增加一样,只是把增加语句换成了修改语句,后面执行语句是相同的 首先也是需要获取并接收输入的要修改的哪个数据以及修改后的数据 代码演示: using System; using Sys ...

  3. 如何跟踪某个session的SQL

    1 oracle自带的sql trace程序可以跟踪本地session sys: alter system set sql_trace = true;对所有会话跟踪 schema: alter ses ...

  4. CSS Media Query

    [CSS Media Query] CSS Media Queries are a feature in CSS3 which allows you to specify when certain C ...

  5. 数据类型&分支流程控制(2)

    1.数据类型 1.数据类型 局部变量:书写在方法中的变量: 全局变量:书写在类中,与方法平级的变量: -如果没有给变量赋初值 -全局变量会默认拥有一个初始值 -局部变量将没有初始值,这个时候不能使用这 ...

  6. JMeter学习(二)录制脚本(转载)

    转载自 http://www.cnblogs.com/yangxia-test 环境 Badboy  version 2.1.1 JDK: 1.7.0_67 Apache  JMeter-2.11 - ...

  7. 【scrapy】其他问题2

    今天爬取豆瓣电影的是时候,出现了两个问题: 1.数据无法爬取并输出Retrying <GET https://movie.douban.com/robots.txt> 看起来像是被拦截了. ...

  8. WPF背景透明内嵌WebBrowser不显示问题,即AllowsTransparency = true 和 Webbrowser 等控件显示冲突

    首先感谢两位先导者: 1. 解决 WPF AllowsTransparency = true 和 Webbrowser 等控件显示冲突 原文地址:https://www.cnblogs.com/zhi ...

  9. ORM之查询

    一.对象查询 1.正向查询 ret1=models.Book.objects.first() print(ret1.title) print(ret1.price) print(ret1.publis ...

  10. 关于 No buffer space available (maximum connections reached?): connect 的处理

    一.问题: hudson一个应用打包部署一直不成功,检查报错 检查项目的JOB配置,开始以为是SVN的问题,但是重启SVN后问题一直存在 二.分析: TCP协议中,关闭TCP连接的是Server端(当 ...