【题目链接】

https://www.lydsy.com/JudgeOnline/problem.php?id=1975

【算法】

A*求k短路

【代码】

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define MAXN 5010
  4. #define MAXM 200010
  5. const double INF = 1e15;
  6.  
  7. int i,tot,n,m,u,v;
  8. int head[MAXN],rhead[MAXN];
  9. double dist[MAXN];
  10. double w,val;
  11.  
  12. struct Edge
  13. {
  14. int to;
  15. double w;
  16. int nxt;
  17. } e[MAXM<<];
  18. struct info
  19. {
  20. int s;
  21. double d;
  22. friend bool operator < (info a,info b)
  23. {
  24. return a.d + dist[a.s] > b.d + dist[b.s];
  25. }
  26. } ;
  27.  
  28. inline void add(int u,int v,double w)
  29. {
  30. tot++;
  31. e[tot] = (Edge){v,w,head[u]};
  32. head[u] = tot;
  33. tot++;
  34. e[tot] = (Edge){u,w,rhead[v]};
  35. rhead[v] = tot;
  36. }
  37. inline void dijkstra(int s)
  38. {
  39. int i,u,v;
  40. double w;
  41. priority_queue< pair<double,int> > q;
  42. static bool vis[MAXN];
  43. memset(vis,false,sizeof(vis));
  44. while (!q.empty()) q.pop();
  45. for (i = ; i <= n; i++) dist[i] = INF;
  46. dist[s] = ;
  47. q.push(make_pair(,s));
  48. while (!q.empty())
  49. {
  50. u = q.top().second;
  51. q.pop();
  52. if (vis[u]) continue;
  53. vis[u] = true;
  54. for (i = rhead[u]; i; i = e[i].nxt)
  55. {
  56. v = e[i].to;
  57. w = e[i].w;
  58. if (dist[u] + w < dist[v])
  59. {
  60. dist[v] = dist[u] + w;
  61. q.push(make_pair(-dist[v],v));
  62. }
  63. }
  64. }
  65. }
  66. inline int Astar(int s,int t)
  67. {
  68. int i,cnt = ,v;
  69. double w,sum = ;
  70. priority_queue< info > q;
  71. info cur;
  72. while (!q.empty()) q.pop();
  73. q.push((info){s,});
  74. while (!q.empty())
  75. {
  76. cur = q.top();
  77. q.pop();
  78. if (cur.s == t)
  79. {
  80. if (sum + cur.d <= val)
  81. {
  82. sum += cur.d;
  83. cnt++;
  84. } else return cnt;
  85. }
  86. for (i = head[cur.s]; i; i = e[i].nxt)
  87. {
  88. v = e[i].to;
  89. w = e[i].w;
  90. q.push((info){v,cur.d+w});
  91. }
  92. }
  93. return ;
  94. }
  95.  
  96. int main()
  97. {
  98.  
  99. scanf("%d%d%lf",&n,&m,&val);
  100. for (i = ; i <= m; i++)
  101. {
  102. scanf("%d%d%lf",&u,&v,&w);
  103. add(u,v,w);
  104. }
  105. dijkstra(n);
  106. printf("%d\n",Astar(,n));
  107.  
  108. return ;
  109.  
  110. }

【SDOI 2010】 魔法猪学院的更多相关文章

  1. [SDOI 2010]魔法猪学院

    Description 题库链接 给出一张 \(n\) 个点 \(m\) 条边有向图,询问最多有多少条不同的路径从 \(1\) 到 \(n\) 并且路径长度和 \(\leq E\) . \(2\leq ...

  2. 解题:SDOI 2010 魔法猪学院

    题面 题外话:神**可持久化左偏树,你谷的人都太神了,学不来 我把这个当做A*模板题的说,先讲一讲个人对A*的理解:如果说普通的BFS是Bellman_Ford,那A*就是一个Dijkstra.以寻找 ...

  3. BZOJ-1975 魔法猪学院 K短路 (A*+SPFA)

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1323 Solved: 433 [Submit][Statu ...

  4. Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1357  Solved: 446[Submit][Statu ...

  5. bzoj 1975: [Sdoi2010]魔法猪学院 [k短路]

    1975: [Sdoi2010]魔法猪学院 裸题... 被double坑死了 #include <iostream> #include <cstdio> #include &l ...

  6. BZOJ_1975_[Sdoi2010]魔法猪学院_A*

    BZOJ_1975_[Sdoi2010]魔法猪学院_A* Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPi ...

  7. K短路 (A*算法) [Usaco2008 Mar]牛跑步&[Sdoi2010]魔法猪学院

    A*属于搜索的一种,启发式搜索,即:每次搜索时加一个估价函数 这个算法可以用来解决K短路问题,常用的估价函数是:已经走过的距离+期望上最短的距离 通常和Dijkstra一起解决K短路 BZOJ1598 ...

  8. bzoj 1975 [Sdoi2010]魔法猪学院

    1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1758  Solved: 557[Submit][Statu ...

  9. P2483 [SDOI2010]魔法猪学院

    P2483 [SDOI2010]魔法猪学院 摘要 --> 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世 ...

  10. 【BZOJ1975】【SDOI2010】魔法猪学院 [A*搜索]

    魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MB[Submit][Status][Discuss] Description iPig在假期来到了传说中的魔法猪 ...

随机推荐

  1. graphite 绘图工具

    graphite 绘图工具

  2. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...

  3. day07-列表类型/元组类型/字典类型/集合类型内置方法

    目录 列表类型内置方法 元组类型内置方法 字典类型内置方法 集合类型内置方法 列表类型内置方法 用来存多个元素,[]内用逗号隔开任意数据类型的元素 1. list()强制类型转换 print(list ...

  4. php 在Linux下的安装

    1.获取php源码 wget http://cn2.php.net/get/php-5.6.6.tar.gz/from/this/mirror mv mirror php-5.6.6.tar.gz t ...

  5. scp: /xxxx: not a regular file

    问题描述 scp root@10.2.1.92:/home /home/wangju/databakroot@10.2.1.92's password: xxxxscp: /home: not a r ...

  6. C# 通知机制 IObserver<T> 和 IObservable<T>

    class Program { public static void Main() { // Define a provider and two observers. LocationTracker ...

  7. 【VIP视频网站项目】VIP视频网站项目v1.0.3版本发布啦(程序一键安装+电影后台自动抓取+代码结构调整)

    在线体验地址:http://vip.52tech.tech/ GIthub源码:https://github.com/xiugangzhang/vip.github.io 项目预览 主页面 登录页面 ...

  8. NOIp知识点复习——最短路计数

    $Mingqi\_H$ NOIp 2017考挂了...gg 重新开始好了. 计划明年2月24号前复习完所有的NOIp知识点(毕竟很不熟练啊),之后到七月底前学习完省选的东西(flag?). 从现在开始 ...

  9. 42.global bucket的使用:单个品牌与所有品牌销量对比

    主要知识点: _global bucket的使用     本例以搜索单个品牌和所有品牌的销量对比进行学习_global .es在进行aggregation操作时都只只是在一个scope中进行聚合等操作 ...

  10. net Core 中定时任务的设置

    接下来的任务 采用定时任务的需求场景: 每天的数据整理,比如库存,每天的零散数据的统计,定时提醒,定时提醒到期未完成的任务-.... 1.采用的第三方类库: quartz 2文档地址:http://w ...