题目链接:http://poj.org/problem?id=1062

题意就不解释了中问题。

这题用dfs也行。但是感觉还是floyd比较好一点主要是他们交易是有条件的交易总的等级差不能超过m

所以这时floyd中path的属性就用到了,path[i][j].MAX表示i交易到j最大等级是多少path[i][j].MIN表示最小等级是多少

然后接下来就简单了。

#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#define inf 0X3f3f3f3f
using namespace std;
int n , m , p , l[110] , x[110] , t[110][110] , v , val[110] , dis[110][110];
struct TnT {
int MAX , MIN;
}path[110][110];
int Abs(int x , int y) {
if(x > y)
return x - y;
else
return y - x;
}
void floyd() {
for(int k = 1 ; k <= n ; k++) {
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
if(dis[i][j] > dis[i][k] + dis[k][j] && Abs(path[i][k].MAX , path[k][j].MIN) <= m && Abs(path[i][k].MIN , path[k][j].MAX) <= m) {
dis[i][j] = dis[i][k] + dis[k][j];
path[i][j].MAX = max(path[i][k].MAX , path[k][j].MAX);
path[i][j].MIN = min(path[i][k].MIN , path[k][j].MIN);
}
}
}
}
}
int main() {
while(cin >> m >> n) {
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= n ; j++) {
path[i][j].MAX = n + 1;
path[i][j].MIN = 0;
dis[i][j] = inf;
}
dis[i][i] = 0;
}
for(int i = 1 ; i <= n ; i++) {
cin >> p >> l[i] >> x[i];
val[i] = p;
path[i][i].MAX = l[i];
path[i][i].MIN = l[i];
for(int j = 1 ; j <= x[i] ; j++) {
cin >> t[i][j] >> v;
dis[i][t[i][j]] = v;
}
}
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= x[i] ; j++) {
if(Abs(l[i] , l[t[i][j]]) <= m) {
path[i][t[i][j]].MAX = max(l[i] , l[t[i][j]]);
path[i][t[i][j]].MIN = min(l[i] , l[t[i][j]]);
}
else {
dis[i][t[i][j]] = inf;
}
}
}
floyd();
int MIN = inf;
for(int i = 1 ; i <= n ; i++) {
MIN = min(MIN , dis[1][i] + val[i]);
}
cout << MIN << endl;
}
return 0;
}

最新文章

  1. Flesch Reading Ease -POJ3371模拟
  2. C++ 类、构造析构、深拷贝
  3. Eclipse: JPA problem: Eclipse does not recognize content of persistence.xml
  4. 工厂方法模式与IoC/DI控制反转和依赖注入
  5. JavaScript中的原型继承原理
  6. 记录最近的几个bug
  7. 实现自己的HashMap
  8. class example of C++
  9. PLA-1
  10. 注册一个gitHub
  11. spring对bean的高级装配之profile机制
  12. rgb &amp; rgba convert
  13. 尚硅谷redis学习1-NOSQL简介
  14. SD从零开始11-12
  15. iOS国际化——通过脚本使storyboard翻译自增
  16. Sony/索尼 NW-ZX300A ZX300 无损音乐播放器4.4口
  17. D:\hunting2014\小题目\字符串倒序
  18. CSS3的新增边框属性
  19. ios NSString format 保留小数点 float double
  20. Java中数组转为List三种情况的优劣对比,常犯的类型转换错误原因解析

热门文章

  1. Rust写时复制Cow&lt;T&gt;
  2. 使用JavaScript的XMLHttpRequest+fromdata 传递blob到后端
  3. for循环打印空心菱形的新方法
  4. Java - 自动配置log4j的日志文件路径
  5. 让techempower帮你通讯服务框架的性能
  6. 自己动手写Spring框架--IOC、MVC
  7. java并发编程(十六)----(线程池)java线程池的使用
  8. Hadoop - YARN Introduce
  9. Element-UI 2.4.11 版本 使用注意(发现一点更新一点)
  10. ASP.NET 一个页上需要显示多个验证码