原题链接:蓝桥杯2022年第十三届决赛真题-出差
解题思路:
基本上是裸的单源最短路
将隔离天数加入到行程花费时间当中,也就是从城市a到城市b需要花费a城市隔离天数加上a到b道路的天数
注意事项:
n可以等于1
从1城市出发不需要隔离
参考代码:
#include<bits/stdc++.h>
using namespace std;
struct node
{
int w;
int to;
int next;
}mp[200005];
int head[10005];
priority_queue<pair<int,int> >q;
int cnt=0;
void add(int x,int y,int z)
{
mp[++cnt].next=head[x];
mp[cnt].to=y;
mp[cnt].w=z;
head[x]=cnt;
}
int dis[10005];
int v[10005];
int c[10005];
int main()
{
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>c[i];
v[i]=0;
dis[i]=1E9;
}
c[1]=0;//1城市不需要隔离
for(int i=1;i<=m;i++)
{
int a,b,w;
cin>>a>>b>>w;
add(a,b,w+c[a]);
add(b,a,w+c[b]);
}
q.push(make_pair(0,1));
dis[1]=0;
while(!q.empty())
{
int x=q.top().second;
q.pop();
if(v[x])
{
continue;
}
v[x]=1;
for(int i=head[x];i;i=mp[i].next)
{
int y=mp[i].to;
if(mp[i].w+dis[x]<dis[y])
{
dis[y]=mp[i].w+dis[x];
q.push(make_pair(-dis[y],y));
}
}
}
cout<<dis[n];
return 0;
} 0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复