自学了一下堆优化,不过好像学废了,求助大佬帮忙调一下

P4779 【模板】单源最短路径(标准版)

Azure__ @ 2022-04-05 16:57:20

样例能过,6个点全WA。 求大佬帮帮蒟蒻,不胜感激。


#include<bits/stdc++.h>
using namespace std;
int n,m,s,d[100001];
bool f[100001];
struct Edge{
    int to,w,next;
}; Edge edge[200001];
int tot,pre[100001];
inline void add(int u,int v,int w){
    edge[tot].to=v;
    edge[tot].w=w;
    edge[tot].next=pre[u];
    pre[u]=tot;
    tot++;
}
struct node
{
    int num,ss;
    inline bool operator <(const node &a)const{
        return ss>a.ss;
    }
};
priority_queue<node> q1;
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    cin>>n>>m>>s;
    for(int i=1;i<=n;i++) pre[i]=-1;
    for(int i=1;i<=n;i++) d[i]=2147483647;
    for(int i=1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        add(u,v,w);
    }
    int t=n;
    d[s]=0;
    q1.push(node{0,s});
    while(!q1.empty()){
        node m=q1.top();
        q1.pop();
        if(f[m.num]) continue;
        f[m.num]=1;
        for(int i=pre[m.num];i!=-1;i=edge[i].next){
            int v=edge[i].to,w=edge[i].w;
            if(d[m.num]+w<d[v]){
                d[v]=d[m.num]+w;
                q1.push(node{v,d[v]});
            }
        }
    }
    for(int i=1;i<=n;i++){
        cout<<d[i]<<" ";
    }
    return 0;
}
```cpp

by Anamnesis @ 2022-04-05 16:59:50

-   q1.push(node{0,s});
+   q1.push(node{s,0});

by Azure__ @ 2022-04-05 17:02:02

@Linking⭐️ 谢谢大佬,没注意这个细节,现在AC了。


|