社区讨论

迪杰斯特拉 求助,样例错了

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 条回复,欢迎继续交流。

正在加载回复...