作业介绍
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;//宏定义 把ll当作long long使用
const ll N=1e5+100;
ll n,m,ans,dist[N],mk[N];
vector<pair<ll,ll>> v[N];
priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> q;//小优先队列
void Dijkstra(){
for(int i=1;i<=n;i++) dist[i]=1e9;
dist[1]=0;
q.push({0,1});//先存距离再存点
while(q.size()){
pair<ll,ll> p=q.top();q.pop();
ll x=p.second;//当前的点
if(mk[x]==1) continue;
mk[x]=1;
//松弛操作
for(int i=0;i<v[x].size();i++){
ll xx=v[x][i].first;//出边点
ll qz=v[x][i].second;//边上的权
if(dist[xx]>dist[x]+qz) dist[xx]=dist[x]+qz,q.push({dist[xx],xx});
}
}
}
int main(){
cin>>n>>m;
while(m--){
ll x,y,z;
cin>>x>>y>>z;
v[x].push_back({y,z});
}
Dijkstra();
for(int i=1;i<=n;i++) cout<<dist[i]<<" ";
if(dist[n]==1e9) dist[n]=-1;
cout<<dist[n];
return 0;
}
题目
认领作业后才可以查看作业内容。
- 状态
- 正在进行…
- 题目
- 4
- 开始时间
- 2025-5-24 0:00
- 截止时间
- 2025-6-30 23:59
- 可延期
- 24 小时