博客
关于我
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/

    你可能感兴趣的文章
    nginx 配置https(一)—— 自签名证书
    查看>>
    nginx 配置~~~本身就是一个静态资源的服务器
    查看>>
    Nginx 配置解析:从基础到高级应用指南
    查看>>
    Nginx下配置codeigniter框架方法
    查看>>
    nginx添加模块与https支持
    查看>>
    Nginx用户认证
    查看>>
    Nginx的Rewrite正则表达式,匹配非某单词
    查看>>
    Nginx的使用总结(一)
    查看>>
    Nginx的可视化神器nginx-gui的下载配置和使用
    查看>>
    Nginx的是什么?干什么用的?
    查看>>
    Nginx访问控制_登陆权限的控制(http_auth_basic_module)
    查看>>
    nginx负载均衡器处理session共享的几种方法(转)
    查看>>
    nginx负载均衡的5种策略(转载)
    查看>>
    nginx负载均衡的五种算法
    查看>>
    Nginx运维与实战(二)-Https配置
    查看>>
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>