祝大家rp++dijkstra求调
查看原帖
祝大家rp++dijkstra求调
580202
Siegerkranz_2735楼主2023/10/21 13:21
#include<bits/stdc++.h>
#define N 100005
using namespace std;
struct Edge{
    int to,next,w;
}edge[2*N];
int n,m,s,head[N],cnt,vis[N];
long long dis[N];
inline void add(int u,int v,int w){
    cnt++;
    edge[cnt].to=v;
    edge[cnt].next=head[u];
    head[u]=cnt;
}
void dijkstra(){
    priority_queue<pair<long long,int> > q;
    dis[s]=0;
    q.push(make_pair(0,s));
    while(!q.empty()){
        int u=q.top().first,w=q.top().second;
        vis[q.top().second]=1;q.pop();
        for(int i=head[s];~i;i=edge[i].next){
            if(dis[edge[i].to]>dis[u]+edge[i].w){
                dis[edge[i].to]=dis[u]+edge[i].w;
                if(!vis[edge[i].to]){
                    q.push(make_pair(-dis[edge[i].to],edge[i].to));
                }
            }
        }
    }
}
int main(){
    memset(head,-1,sizeof(head));
    memset(dis,-0x7fffffff,sizeof(dis));
    cin>>n>>m>>s;
    for(int u,v,w,i=1;i<=m;i++){
        cin>>u>>v>>w;
        add(u,v,w);
        add(v,u,w);
    }
    dijkstra();
    for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
    return 0;
}
2023/10/21 13:21
加载中...