博客
关于我
HDU1595(最短路 + 枚举)
阅读量:228 次
发布时间:2019-02-28

本文共 2813 字,大约阅读时间需要 9 分钟。

?????????????1??n??????????????????????????????????????????????????????????????

????

????????1??n????????????????????????????????????????????????????????????

  • ????1??n??????
  • ?????????? - ??????????
  • ????

    ????????????????????

  • ??????????????????????????????????????????????

  • ?????????????????????????????????????????????????????????0?????????????

  • Dijkstra?????????????????????Dijkstra???????1??n??????????????????????????????????????????????????????????????

  • ?????????Dijkstra?????????????????????????????????????????????????????

  • ????????????????????????????????????????????????????????????????-1?

  • ????

    ?????????C++???

    #include 
    #include
    #include
    #include
    #include
    using namespace std;const int inf = 1 << 30;const int maxn = 1005;const int maxm = 1e6 + 1e4;struct edge { int to; int w; int h; int next;};struct Node { int k, s; Node(int a, int b) { k = a; s = b; } bool operator<(const Node a) const { return s < a.s; }};int dijkstra(int s, int t, int x) { int dist[s + 1]; fill(dist, dist + s + 1, inf); dist[s] = 0; priority_queue
    q; q.push(Node(s, 0)); int visited[s + 1] = {0}; while (!q.empty()) { Node p = q.top(); q.pop(); if (visited[p.k]) continue; visited[p.k] = 1; for (int i = head[p.k]; i != -1; i = e[i].next) { edge f = e[i]; if (f.h != -1 && f.h < x) continue; if (dist[f.to] > dist[p.k] + f.w) { dist[f.to] = dist[p.k] + f.w; q.push(Node(f.to, dist[f.to])); } } } return (dist[t] == inf) ? -1 : dist[t];}int main() { int t; scanf("%d", &t); while (t--) { int n, m; scanf("%d", &n); scanf("%d", &m); int height[n + 1]; for (int i = 1; i <= n; ++i) { scanf("%d", &height[i]); } edge e[maxm * 2]; int head[n + 1] = {-1}; int cnt = 0; for (int i = 0; i < m; ++i) { int x, y, z, c; scanf("%d", &x); scanf("%d", &y); scanf("%d", &z); scanf("%d", &c); addedge(x, y, z, c); addedge(y, x, z, c); } int l = 0, r = height[1] - height[n]; int max_height = -1; int max_length = 0; while (l <= r) { int mid = l + (r - l) / 2; int current_max_height = mid; int ans = dijkstra(1, n, current_max_height); if (ans != -1) { if (current_max_height > max_height) { max_height = current_max_height; max_length = ans; } l = mid + 1; } else { r = mid - 1; } } if (max_height == -1) { puts("cannot reach destination"); } else { puts("maximum height = " + to_string(max_height)); puts("length of shortest route = " + to_string(max_length)); } }}

    ????

  • ?????

    • edge ???????????????????????????????
    • Node ??????????????????????????????
  • Dijkstra???

    • ?????????Dijkstra???????????????????????
    • ?????????????????????????????
  • ?????

    • ???????????????????????????????
  • ?????

    • ????????????????????????????
  • ??

    ??????????????????1??n????????????????????Dijkstra?????????????????????????????????????????

    转载地址:http://thep.baihongyu.com/

    你可能感兴趣的文章
    python中存根文件(.pyi)的用途是什么?
    查看>>
    Python中实现ASCII码与字符相互转换
    查看>>
    Python中实现获取所有微信好友的头像并拼接成一张图片
    查看>>
    Python中对象的布尔值
    查看>>
    python中对集合的操作
    查看>>
    python中将列表转换为元组的时间复杂度,反之亦然
    查看>>
    Python中布尔表达式的求值
    查看>>
    python中很常用的10个内置函数整理(初学必备)
    查看>>
    python中打印二维列表数据
    查看>>
    python中打散数组shuffle
    查看>>
    Python中执行外部命令
    查看>>
    Python中拼接numpy数组-ChatGPT4o作答
    查看>>
    Python中提示:no module named 'PIL'
    查看>>
    Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
    查看>>
    python中数据类型存储_浅谈Python中的数据类型
    查看>>
    python中文件最重要的功能是什么-学 Python 都用来干嘛的?
    查看>>
    python中文版语言_高盛最新调查:Python超过汉语成为未来最重要技能,你准备学哪种编程语言?...
    查看>>
    Python中文问题SyntaxError
    查看>>
    Python中方括号和括号括起来的列表有什么区别?
    查看>>
    python中时间处理_Python中处理时间的几种方法小结
    查看>>