【vijos】【最短路变式】小D的旅行

来源:互联网 发布:数据库认证培训 编辑:程序博客网 时间:2024/04/28 22:09

描述

旅行是一件颇有趣的事情,但是在旅行前规划好路线也很重要。
现在小D计划要去U国旅行。
U国有N个城市,M条道路,每条道路都连接着两个城市,并且经过这条道路需要一定的费用wi。
现在小D想要从u城市到v城市,但是他的汽车需要在途中加一次油(途中包括u和v两个城市)。在每个城市加油都有不同的费用vi。
小D想知道从u城市到v城市最少需要多少费用(经过道路的费用+加油的费用)。
城市从1-n进行编号。

格式

输入格式

第一行两个正整数n,m,表示n个城市,m条无向道路
接下来n行,第i行一个整数vi,表示第i个城市的加油费用
接下来m行,第i行三个整数ai, bi, wi,表示第i条道路连接ai和bi两个城市,经过要花费wi的费用
接下来一个正整数q,表示小D有q个询问
接下来q行,第i行两个整数ui, vi, 表示小D想知道从ui到vi需要的最少费用(ui和vi可能相等)

输出格式

对于每个询问,输出一行整数,表示最小的费用,如果ui不能到达vi,则输出-1

代码

做两遍floyd即可。
注意floyd的循环顺序是k,i,j。

#include <cstdio>#include <cstring>#include <algorithm>#define maxn 310#define INF 1000000000-1using namespace std;int n,m,q,a,b,w,u,l,v[maxn];int dist[maxn][maxn],map[maxn][maxn];int main(){    //freopen("in.txt","r",stdin);    scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++) scanf("%d",&v[i]);    for(int i=1;i<=n;i++)    {        map[i][i]=v[i]; dist[i][i]=0;        for(int j=i+1;j<=n;j++) map[i][j]=map[j][i]=dist[i][j]=dist[j][i]=INF;    }    for(int i=1;i<=m;i++){        scanf("%d%d%d",&a,&b,&w);        if(a==b) continue;        dist[b][a]=dist[a][b]=min(dist[a][b],w);    }    for(int k=1;k<=n;k++)        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);    for(int k=1;k<=n;k++)        for(int i=1;i<=n;i++)            for(int j=1;j<=n;j++)                {                    map[i][j]=min(map[i][j],dist[i][k]+dist[k][j]+v[k]);                }    scanf("%d",&q);    while(q--){        int ans=INF;        scanf("%d%d",&u,&l);        ans=map[u][l];        if(ans<INF) printf("%d\n",ans);        else printf("-1\n");    }    return 0;}
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 qq登陆后隐藏了怎么办 易班密码忘记了怎么办 老师上课讲错了怎么办 专升本差了一分怎么办 登录不上学信网怎么办 steam被好友删了怎么办 护士继续教育学分证丢了怎么办 护士证到期未延续注册怎么办 学籍和户口不在一起小升初怎么办 定了酒店不能退怎么办 去哪儿网酒店不允许取消怎么办 快递寄送身份证扣海关怎么办 7岁龋齿烂到牙根怎么办 法院判完对方说没钱怎么办 初中填完志愿后怎么办 上海小学借读一年级没有学籍怎么办 学历不高的我该怎么办 没学历的我该怎么办 物业达不到服务标准该怎么办 没有能力的人该怎么办 工作累了腰疼怎么办 机场来早了6小时怎么办 苏宁金融综合评分不足怎么办 苏宁金融秒拒怎么办 微盘账号忘记了怎么办 天府e税忘记密码怎么办 未成年在外面没地方住怎么办? 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办