#include<bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define inf 0x3f3f3f3f
const int N=1e5+5;
int n,m;
int dis[N],done[N],cnt[N];
struct edge{
int to,w;
};
struct node{
int id,dis;
bool operator<(const node& t)const{
return dis>t.dis;
}
};
vector<edge>e[N];
void bfs(){
priority_queue<node>q;
for(int i=1;i<=n;i++){
dis[i]=inf;
}
q.push({1,0});
dis[1]=0;
while(q.size()){
auto u=q.top();
q.pop();
if(done[u.id]) continue;
done[u.id]=1;
for(auto x:e[u.id]){
if(done[x.to]) continue;
if(dis[x.to]>u.dis+1){
dis[x.to]=u.dis+1;
q.push({x.to,dis[x.to]});
cnt[x.to]=cnt[u.id]+x.w;
}
else if(dis[x.to]==u.dis+1){
if(cnt[x.to]>cnt[u.id]+x.w)
cnt[x.to]=cnt[u.id]+x.w;
q.push({x.to,dis[x.to]});
}
}
}
cout<<dis[n]+1<<" "<<cnt[n]<<endl;
}
void solve(){
cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y,w;
cin>>x>>y>>w;
e[x].push_back({y,w});
e[y].push_back({x,w});
}
bfs();
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int tt=1;
// cin>>tt;
while(tt--) solve();
return 0;
}
坐火车(BFS)---2023年天梯赛(GPLT)上海理工大学校内选拔赛-F
最新推荐文章于 2024-11-01 14:57:44 发布
该代码展示了使用C++编写的Dijkstra算法,用于解决图中的单源最短路径问题,通过广度优先搜索(BFS)更新节点距离和计数。
摘要由CSDN通过智能技术生成