求救

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

Owenzjg @ 2022-10-26 23:26:42

#include <bits/stdc++.h>
using namespace std;
#define maxn 100000+10
int n,m;
//顶点的数量 边的数量

struct node {
    int v,w;
    //顶点和边的权值
};
bool operator < (const node& a,const node& b) {
    return a.w>b.w;
    //从小到大排列边的权值
}
vector <node> g[maxn];
//记录从原点到其它剩余节点的最短路
int f[maxn];
bool vis[maxn];
priority_queue<node> q;
void dijkstra(int s){
    for(int i=1;i<=n;i++){
        f[i]=1<<30;
    }
    f[s]=0;//赋予起始点
    q.push( (node){s,0} );

    while(q.size()!=0){
        node t=q.top();
        q.pop();
        if(vis[t.v]) continue;
        else vis[t.v]=1;
        for(int i=0;i<g[t.v].size();i++){
            node to=g[t.v][i];
            if(f[to.v]>f[t.v]+to.w){
                f[to.v]=f[t.v]+to.w;
                q.push((node){t.v,f[t.v]});
            }
        }
    }

}
int main(){
    int start;
    scanf("%d%d%d",&n,&m,&start);
    for(int i=1;i<=m;i++){
        int x,y,z;
        scanf("%d%d%d",&x,&y,&z);
        g[x].push_back( (node){y,z} );
    }
    dijkstra(start);
    for(int i=1;i<=n;i++){
        printf("%d ",f[i]);
    }
    return 0;
}

by qwq___qaq @ 2022-10-26 23:28:43

@Owenzjg 边数可能达到 2\times 10^5


by scp020 @ 2022-10-26 23:31:11

@思考人生中 错误的,不用长整型


by Owenzjg @ 2022-10-26 23:31:48

@_sto_pengzijunorz

关键问题在于我现在连样例都过不了


by 思考人生中 @ 2022-10-26 23:33:28

q.push((node){t.v,f[t.v]});

t改为to


by 思考人生中 @ 2022-10-26 23:34:07

@scp020 看错数据范围了(


by Owenzjg @ 2022-10-26 23:34:21

@scp020

又碰见你了,刚才我在学术区问的时候就是你

为什么错了呀!连样例都过不了

ps:你的主页挺有意思的


by scp020 @ 2022-10-26 23:34:31

@思考人生中 IEE


by Owenzjg @ 2022-10-26 23:35:57

谢谢各位的帮助,此贴结


by scp020 @ 2022-10-26 23:36:20

@Owenzjg 36行应为

q.push((node){to.v,-f[t.v]});

|