博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【POJ 1062】昂贵的聘礼(最短路)
阅读量:6382 次
发布时间:2019-06-23

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

Dijkstra最短路,每次限制一个等级差,再更新答案。

#include 
#define N 105#define INF 1e9int m, n;int p[N], l[N], x, t, v, g[N][N];int w, minc, d[N], u[N], ans;void Dijkstra(int q){ for(int i = 1; i <= n; i++){ d[i] = g[1][i]; if(!d[i])d[i]=INF; u[i]=0; } u[1] = 1; for(int i = 2; i <= n; i++) { minc = 1e9; w = 0; for(int j = 2; j <= n; j++) if(!u[j] && minc >= d[j] && l[j] >= q && l[j] <= q + m) { minc = d[j]; w = j; } if(!w) break; u[w] = 1; for(int j = 2; j <= n; j++) if(!u[j] && g[w][j] && d[j] > d[w] + g[w][j] && l[j] >= q && l[j] <= q + m) d[j] = d[w] + g[w][j]; } for(int i = 2; i <= n; i++) if(d[i] + p[i] < ans &&l[i] >= q && l[i] <= q + m)ans = d[i] + p[i]; }int main(){ scanf("%d%d", &m, &n); for(int i = 1; i <= n; i++) { scanf("%d%d%d", &p[i], &l[i], &x); for(int j = 1; j <= x; j++) { scanf("%d%d", &t, &v); g[i][t] = v; } } ans = p[1]; for(int i = l[1] - m; i <= l[1] ; i++) Dijkstra(i); printf("%d\n",ans); return 0;}  

 

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

你可能感兴趣的文章
每日一道算法题--leetcode 15--三数之和--python
查看>>
2017 11 2
查看>>
《WebKit技术内幕》阅读摘要 —— WebKit 架构和模块
查看>>
《阿里云前端技术周刊》第二期
查看>>
MyBatis中的${}和#{}
查看>>
以API驱动的开发流程:选择一个出色的API规范可以帮你节省时间和省去麻烦
查看>>
D2 日报 2019年5月28日
查看>>
如何更好的使用module vuex?
查看>>
java B2B2C Springcloud电子商城系统-断路器(Hystrix)
查看>>
MySQL忘记密码的正确解决方法
查看>>
2012年报刊杂志订阅目录【全面 1900条记录】
查看>>
apache和tomcat区别_三
查看>>
mac brew安装的mysql 无法远程访问的问题
查看>>
位、字节和字
查看>>
软件测试基础(我以前的一些笔记,希望对大家有帮助,有错漏的地方希望大家指出)...
查看>>
node.js 的错误提示
查看>>
helloword
查看>>
防重复请求处理的实践与总结
查看>>
聊聊hikari连接池的isAllowPoolSuspension
查看>>
从PHP语法糖剖析Zend VM引擎
查看>>