题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=28972

思路:spfa求出每个点到其余顶点的最短路(最短路上的每个点的val都小于等于起点的val),然后又二维数组dp来保存,最后询问的时候就是枚举中间点i了,min{dp[i][u]+dp[i][v]+cost[i]};

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<vector>
 7 using namespace std;
 8 #define inf 1<<30
 9
10 struct Edge{
11     int v,w;
12     Edge(){}
13     Edge(int vv,int ww):v(vv),w(ww){}
14 };
15
16 vector<vector<Edge> >g;
17 int cost[111],dist[111],dp[111][111];
18 bool mark[111];
19 int n,m,Q;
20
21 void spfa(int s)
22 {
23     memset(mark,false,sizeof(mark));
24     fill(dist,dist+n+1,inf);
25     dist[s]=0;
26     queue<int>que;
27     que.push(s);
28     while(!que.empty()){
29         int u=que.front();
30         que.pop();
31         mark[u]=false;
32         for(int i=0;i<g[u].size();i++){
33             int v=g[u][i].v,w=g[u][i].w;
34             if(dist[u]+w<dist[v]&&cost[v]<=cost[s]){
35                 dist[v]=dist[u]+w;
36                 if(!mark[v]){
37                     mark[v]=true;
38                     que.push(v);
39                 }
40             }
41         }
42     }
43     for(int i=1;i<=n;i++)dp[s][i]=dist[i];
44 }
45
46
47 int main()
48 {
49     int u,v,w,t=0;
50     while(~scanf("%d%d%d",&n,&m,&Q)){
51         if(n==0&&m==0&&Q==0)break;
52         for(int i=1;i<=n;i++)scanf("%d",&cost[i]);
53         g.clear();
54         g.resize(n+2);
55         while(m--){
56             scanf("%d%d%d",&u,&v,&w);
57             g[u].push_back(Edge(v,w));
58             g[v].push_back(Edge(u,w));
59         }
60         for(int i=1;i<=n;i++)
61             for(int j=1;j<=n;j++)dp[i][j]=inf;
62         for(int i=1;i<=n;i++)spfa(i);
63         if(t)puts("");
64         printf("Case #%d\n",++t);
65         while(Q--){
66             scanf("%d%d",&u,&v);
67             int ans=inf;
68             for(int i=1;i<=n;i++){
69                 if(dp[i][u]==inf||dp[i][v]==inf)continue;
70                 ans=min(ans,dp[i][u]+dp[i][v]+cost[i]);
71             }
72             if(ans==inf)ans=-1;
73             printf("%d\n",ans);
74         }
75     }
76     return 0;
77 }
78
79                 

View Code

uva 10246(最短路变形)相关推荐

  1. poj 2263 最短路变形——最小边的最大值

    文章目录 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 本题:最短路变形--最小边的最大值 最短路变形--最大边的最小值 poj2253

  2. poj 2253 最短路变形——最大边的最小值

    文章目录 本题:最短路变形--最大边的最小值 最短路变形--最小边的最大值 本题:最短路变形--最大边的最小值 题意: 给出两只青蛙.以及其他石头的坐标,需要求出可以到达另一只青蛙的所有路径中,青蛙跳 ...

  3. 【图论-最短路变形】想越狱的小杉

    [图论-最短路变形]想越狱的小杉 Time Limit:1000MS  Memory Limit:65536K Description 背景 Background 这次小杉来到了经典美剧<越狱& ...

  4. poj 1797(最短路变形)

    题目链接:http://poj.org/problem?id=1797 思路:题目意思很简单,n个顶点,m条路,每条路上都有最大载重限制,问1->n最大载重量.其实就是一最短路的变形,定义wei ...

  5. nyoj 307(最短路变形)

    解题思路:这道题和上一道题一样,也是最短路的变形,我之前的想法是二分答案,然后再dp去判断是否可以满足要求,但发现这样子的话会存在问题:因为一条路可能走多次,就无法保证其后效性. 看了别人的思路:先以 ...

  6. 最小花费(最短路变形+中南大学复试机试)

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 输入 ...

  7. UVA 1416 最短路

    UVA 1416 题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=sh ...

  8. L3-007. 天梯地图 -最短路变形

    L3-007. 天梯地图 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校 ...

  9. ssl1762-工厂的烦恼【图论,最短路变形(最长路)】

    题目 一个有向图,求它的最长路. 输入 5 5 1 2 2 2 4 9 1 3 7 3 4 1 4 5 6 输出 17 解题思路 就是最短路的算法进行一些更改.不过注意加判断 if (a[i][k] ...

  10. CERC2017 Gambling Guide,最短路变形,期望dp

    题目链接 题面链接 题意 给定一个无向图,你需要从111点出发到达n" role="presentation" style="position: relativ ...

最新文章

  1. struts.xml配置详解
  2. Java基础学习总结(15)——java读取properties文件总结
  3. HTC G7 金卡 制作
  4. MySQL concat()函数
  5. linux安装typecho教程,Typecho上手指南
  6. 通用 PE 工具箱1.9.6(XP内核)by Uepon(李培聪)
  7. 系统学习深度学习(二十六)--BiRNN
  8. DC guide ---3
  9. java奶茶店管理系统_奶茶店的管理信息系统.doc
  10. 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验二十四:SD卡模块
  11. pandas之透视表
  12. ## Asset Store(unity商店) 如何下载已购买的资源?*
  13. 【亲自动手试验过的】硬盘免光驱安装Fedora5
  14. 9款好用的SSH客户端软件推荐
  15. VSCode 前端插件推荐
  16. tcsc工作原理matlab仿真,基于Matlab的TCSC建模与仿真研究.doc
  17. STM32人脸识别系统设计(程序代码+论文)
  18. ODR, BSRR, BRR的差别
  19. 基于SSM的备忘录管理系统
  20. 什么是服务器 ?服务器常见的系统和技术有哪些?

热门文章

  1. 线性回归模型异方差解决方法
  2. 使用PyInstaller脚本打包时提示Unable to open icon file 的一种情况
  3. 大数据求中位数(插值计算)
  4. csdn博客修改名字,不需要重新注册的。
  5. 计算机网络:计算路由表下一跳
  6. 按键精灵通过句柄获取窗口坐标_按键精灵9 得到鼠标指向的窗口句柄
  7. python实现矩阵的转置_Python实现矩阵转置的方法分析
  8. mysql数据,中国最新行政区划数据,到乡村共5级
  9. $('xx')[0].files[0]的意思
  10. Linux系统下修改DNS地址的三种方法: