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

    你可能感兴趣的文章
    NLP度量指标BELU真的完美么?
    查看>>
    NLP的不同研究领域和最新发展的概述
    查看>>
    NLP的神经网络训练的新模式
    查看>>
    NLP采用Bert进行简单文本情感分类
    查看>>
    NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
    查看>>
    NLP项目:维基百科文章爬虫和分类【02】 - 语料库转换管道
    查看>>
    NLP:使用 SciKit Learn 的文本矢量化方法
    查看>>
    nmap 使用方法详细介绍
    查看>>
    Nmap扫描教程之Nmap基础知识
    查看>>
    nmap指纹识别要点以及又快又准之方法
    查看>>
    Nmap渗透测试指南之指纹识别与探测、伺机而动
    查看>>
    Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
    查看>>
    NMAP网络扫描工具的安装与使用
    查看>>
    NMF(非负矩阵分解)
    查看>>
    nmon_x86_64_centos7工具如何使用
    查看>>
    NN&DL4.1 Deep L-layer neural network简介
    查看>>
    NN&DL4.3 Getting your matrix dimensions right
    查看>>
    NN&DL4.7 Parameters vs Hyperparameters
    查看>>
    NN&DL4.8 What does this have to do with the brain?
    查看>>
    nnU-Net 终极指南
    查看>>