题意

  • 给一个图,nnn 个点 mmm 条边,qqq 次询问,求从 iii 到 jjj 的走过条数不超过 ccc 的最短路的长度,走路的时候过的边的长度必须是不减的

  • 数据范围:150150150 点,300030003000 边,100010001000 次询问,时间要求 303030 秒


题解

  • 定义 dp[i][j][k]dp[i][j][k]dp[i][j][k] 为从 iii 到 jjj ,恰好走 kkk 次路的最短距离。
  • 由于我们要满足路径边权递增,所以会想到给所有边按照边权排个序。然后我们依次将边加入图中,这样就可以保证路径边权是递增的。
  • 我们会注意到,由于任意两个点间的路径不能存在环(路径边权递增),所以任意两个点之间的距离至多为 n−1n-1n−1 ,这样我们就把 ccc 减小为 n−1n-1n−1 了!

AC-Code

#include <bits/stdc++.h>
using namespace std;const int maxm = 3e3 + 5;
const int maxn = 150 + 3;
const int mod = 1e9 + 7;struct Edge {int x, y, w;bool operator < (const Edge &t) const {return w < t.w;}
}edge[maxm];int dp[maxn][maxn][maxn];void update(int& a, int b) {if (a == -1 || b < a) a = b; // 如果无法到达,或者b更优,更新
}int main() {int T; cin >> T;while (T--) {int N, M, Q;    cin >> N >> M >> Q;memset(dp, -1, sizeof dp);for (int i = 0; i <= N; ++i)  dp[i][i][0] = 0;for (int i = 1; i <= M; ++i) cin >> edge[i].x >> edge[i].y >> edge[i].w;sort(edge + 1, edge + 1 + M);for (int i = 1; i <= M; ++i)  // 升序枚举所有边for (int start = 1; start <= N; ++start)  // 枚举起点for (int step = 1; step < N; ++step)  // 枚举步数if (dp[start][edge[i].x][step - 1] != -1)  // 如果可以从start到达这条边的起点update(dp[start][edge[i].y][step], dp[start][edge[i].x][step - 1] + edge[i].w); // 尝试走这条边到达edge[i].yfor (int i = 0; i < Q; ++i) {int x, y, c;   cin >> x >> y >> c;if (c >= N)    c = N - 1; // int ans = -1;for (int j = 0; j <= c; ++j) if (dp[x][y][j] != -1)    update(ans, dp[x][y][j]);cout << ans << endl;}}return 0;
}

Problem C. Increasing Shortest Path【贪心 最短路-DP】相关推荐

  1. hdu 5636 Shortest Path(Floyd最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5636 解题思路: 这道题可以用Floyd解决,不过需要特殊处理一下: 实际上我们只需要利用添加的那三条 ...

  2. SPOJ ACPC13——Increasing Shortest Path

    题目传送们 题目梗概 给出一个有mm条边(有边权)nn个点的有向图. 给出QQ个询问ai,bi,ciai,bi,ci,询问aiai到bibi边数不超过cici的路径和的最小值,且要求该路径上的边权递增 ...

  3. P - The Shortest Path in Nya Graph HDU - 4725

    P - The Shortest Path in Nya Graph HDU - 4725 最短路 不是 每两个点之间按层数设置边权 + 额外边权 TLE 是 相邻两层之间设置边权 + 额外边权 需注 ...

  4. [CF843D]Dynamic Shortest Path

    [CF843D]Dynamic Shortest Path 题目大意: 给定一个带权有向图,包含\(n(n\le10^5)\)个点和\(m(m\le10^5)\)条边.共\(q(q\le2000)\) ...

  5. AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)

    题目链接:http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=GRL_1_C All Pairs Shortest Path Input ...

  6. zoj How Many Shortest Path

    How Many Shortest Path 题目: 给出一张图,求解最短路有几条.处理特别BT.还有就是要特别处理map[i][i] = 0,数据有不等于0的情况! 竟然脑残到了些错floyd! ! ...

  7. CF938G Shortest Path Queries(线性基/线段树分治/异或)

    CF938G Shortest Path Queries 支持加边删边和查询两点之间的异或最短路,我们可以使用线段树分治,然后利用线性基求解. 但是这里图可能不是联通的,所以查询两点之间的异或和需要边 ...

  8. 程序员的算法课(19)-常用的图算法:最短路径(Shortest Path)

    一.最短路径问题 [google笔试题]一个环形公路,给出相邻两点的距离(一个数组),求任意两点的最短距离,要求空间复杂度不超过O(N). 如果从有向图中某一顶点(称为源点)到达另一顶点(称为终点)的 ...

  9. hdu 3631 Shortest Path(Floyd)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3631 Shortest Path Time Limit: 3000/1000 MS (Java/Oth ...

最新文章

  1. 滑动窗口,拥塞控制算法
  2. centos7中使用yum安装tomcat mysql 等
  3. [py]django url 参数/reverse和HttpResponseRedirect
  4. POJ1466 最大点权独立集
  5. Linux下内存问题检测神器 valgrind
  6. MySQL流程控制函数-case结构
  7. ASP.NET Core 开源项目 nopCommerce,一款沉淀13年的电商开源佳作!
  8. 简单快速导出word文档
  9. 个人觉得非常好用的mysql客户端工具的HeidiSQL
  10. 实验五 单表查询(V2.0版)
  11. learn go return fuction
  12. Fisher-Yates 乱序算法
  13. java 1.6 jre 下载_jre1.6 64位官方下载
  14. GitHub排名第一!免费最”强“12306抢票神器,程序员再不用跪求加速包!
  15. as常用固定搭配_初中英语常用固定搭配
  16. 220913_100620-华为全球校园AI算法赛事(推荐方向):广告-信息流跨域CTR预估
  17. JAVAWEB增删改查武林秘籍
  18. android 7.0分享朋友圈提示:“获取资源失败,仅支持分享照片至朋友圈”或者FileProvider生成的Uri无法识别
  19. 未解Bug-邮箱字母莫名变成大写,导致修改密码时密码不一致
  20. 解决FTP上传时报错“父路径不存在”问题

热门文章

  1. 计算机管理无法打开权限不足,win10管理员权限不足怎么设置_win10管理员权限不足如何解决...
  2. ROS、OpenAI和Gazebo机器人与人工智能仿真与实践教研杂记(二)环境构建
  3. 为什么要学计算机排比句,计算机等级考试上机应试技巧
  4. 形象标识 新松机器人_走进新松机器人公司 看新松机器人三大优势
  5. /usr/local/go/src/net/cgo_linux.go:12:8: no such package located
  6. Thinkpad linux 读卡器驱动
  7. MacM1 AndroidStudio 自带模拟器安装不上apk
  8. 计算机应用基础心得体会300字,网络远程学习的心得体会
  9. 太阳能电池系统行业调研报告 - 市场现状分析与发展前景预测
  10. Brain Tumor Segmentation (BraTS) 脑部肿瘤分割2--二维UNet的复现与数据准备篇