社区讨论
迪杰斯特拉 求助,样例错了
P4779【模板】单源最短路径(标准版)参与者 2已保存回复 1
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 1 条
- 当前快照
- 1 份
- 快照标识符
- @mi7y2ptw
- 此快照首次捕获于
- 2025/11/21 05:29 4 个月前
- 此快照最后确认于
- 2025/11/21 05:29 4 个月前
CPP
#include<bits/stdc++.h>
#define ll long long
#define ri register int
#define maxn 10005
#define maxm 500005
#define INF 1234567890
using namespace std;
struct Edge {
int from,to,w,next;
}e[maxm];
int head[maxn],cnt,n,m,s,vis[maxn],dis[maxn];
struct node {
int w,now;
};
inline bool operator < (node x, node y)
{return x.w>y.w;}
priority_queue<node>q;
inline void add(int from,int to,int w) {
e[++cnt].from=from;
e[cnt].to=to;
e[cnt].w=w;
e[cnt].next=head[from];
head[from]=cnt;
}
inline void dijkstra() {
for(ri i=1;i<=n;++i) {dis[i]=INF;}
dis[s]=0;
q.push((node){0,s});
while(!q.empty()) {
node x=q.top();
q.pop();
int u = x.now;
if(vis[u]) continue;
vis[u]=1;
for(ri i = head[u]; i; i = e[i].next) {
int v=e[i].from;
if(dis[v]>dis[u]+e[i].w) {
dis[v]=dis[u]+e[i].w;
q.push((node){dis[v],v});
}
}
}
}
int main() {
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
ios :: sync_with_stdio(false);
cin >> n >> m >> s;
for(ri i = 1, x, y, z; i <= m; ++i) {
cin >> x >> y >> z;
add(x,y,z);
}
dijkstra();
for(ri i = 1; i <= n; ++ i)
cout << dis[i] << " ";
return 0;
}
回复
共 1 条回复,欢迎继续交流。
正在加载回复...