用优先队列和vector实现的dijkstra,找不到问题在哪
查看原帖
用优先队列和vector实现的dijkstra,找不到问题在哪
287266
Viottery楼主2020/12/4 21:31
#include<bits/stdc++.h>
using namespace std;

#define maxn 100010
typedef long long ll;
ll dis[maxn];
int m, n, s;
int vis[maxn];
vector<int> p[maxn], e[maxn];
struct node{
    int x, dis;
    bool operator < (const node &aa)const{
        return aa.dis < dis;
    }
};

void add_edge(int a, int b, int w){
    p[a].push_back(b);
    e[a].push_back(w);
}

priority_queue<node> q;
void dijkstra(int x){
    memset(dis, 0x7f, sizeof dis);
    memset(vis, 0, sizeof vis);
    dis[x]=0;
   
    q.push((node){x, 0});
    while(!q.empty()){
        int fro=q.top().x;
        q.pop();
        if(vis[fro])continue;
        vis[fro]=1;
        for(register unsigned int i=0; i<p[fro].size(); ++i){
            if(vis[p[fro][i]])continue;
            if(dis[p[fro][i]]>dis[fro]+e[fro][i]){
                dis[p[fro][i]]=dis[fro]+e[fro][i];
                q.push((node{p[fro][i], dis[p[fro][i]]}));
            }
        }
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin >> n >> m >> s;
    for(register int i=1;i<=m;++i){
        int u, v;
        ll w;
        cin >> u >> v;
        cin >> w;
        add_edge(w, v, w);
    }
    dijkstra(s);
    for(register int i=1;i<=n;++i){
        cout << dis[i] << " ";
    }
}

有re有wa,求助问题在哪

2020/12/4 21:31
加载中...