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

    你可能感兴趣的文章
    Python3.x:遍历select下拉框获取value值
    查看>>
    python360百科_11月编程排行榜:Python超过Java成第二
    查看>>
    Python关于Paginator分页函数详细解析 附实战代码
    查看>>
    python3、ipython3、setup-tools、pip等环境搭建详细总结
    查看>>
    python3下使用cv2.imwrite存储带有中文路径图片或者绝对路径图片
    查看>>
    python3与django中@property详解
    查看>>
    python3中如何表示无穷大
    查看>>
    Python3中提示:no module named 'wxpy'
    查看>>
    python3中选择文件对话框的格式打开和保存图片
    查看>>
    python3为什么print永远都是地址_Python3 print 函数用法总结
    查看>>
    Python3之uuid模块
    查看>>
    Python3之写入Excel文档(xlsxwriter)
    查看>>
    Python3之打印操作打印流重定向(下)
    查看>>
    python3判断字典、列表、元组为空以及字典是否存在某个key的方法
    查看>>
    Python3利用pymysql操作 MySQL
    查看>>
    python3处理json文件中含有中文dumps的应用
    查看>>
    Python3子进程输出
    查看>>
    Python3学习笔记3,变量、运算符
    查看>>
    Python3学习笔记(urllib模块的使用)
    查看>>
    python3安装scapy_Linux下安装scapy-python3
    查看>>