社区讨论
dijkstra 36分 求调
P4779【模板】单源最短路径(标准版)参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo3fxzlk
- 此快照首次捕获于
- 2023/10/24 06:00 2 年前
- 此快照最后确认于
- 2023/10/24 06:00 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
int read() {
int nn=0,mm=1;
char ch=getchar();
while(ch>'9'||ch<'0') {
if(ch=='-') {
mm=-1;
}
ch=getchar();
}
while(ch<='9'&&ch>='0') {
nn=nn*10+ch-'0';
ch=getchar();
}
return nn*mm;
}
struct bian{
int next;
int len;
int to;
} a[200001];
struct dian{
int dis;
int i;
bool operator <(const dian &x)const{
return x.dis<dis;
}
};
int dis[100001],head[100001];
bool vis[100001];
int n,m,k;
priority_queue<dian>q;
void dijkstra() {
for(int i=1; i<=n; i++) dis[i]=INT_MAX;
dis[k]=0;
while(!q.empty()){
int now=q.top().i;
q.pop();
if(vis[now]){
continue;
}
vis[now]=1;
for(int i=head[now];i;i=a[i].next){
int y=a[i].to;
if(dis[y]>dis[now]+a[i].len) {
dis[y]=dis[now]+a[i].len;
if(!vis[y]){
q.push({dis[y],y});
}
}
}
}
}
int main() {
n=read(),m=read();
k=read();
for(int i=1;i<=m;i++){
int s=read(),e=read(),len=read();
a[i].next=head[s];
a[i].len=len;
a[i].to=e;
head[s]=i;
}
q.push({0,k});
dijkstra();
for(int i=1;i<=n;i++){
printf("%d ",dis[i]);
}
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...