vector存边,36分求调
查看原帖
vector存边,36分求调
836104
cxlian25楼主2023/1/6 21:39
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+3;
int n,m,s,d[N],vis[N];
struct E{
    int to,dis;
};
vector<E>edge[N];
int main(){
    scanf("%d%d%d",&n,&m,&s);
    for(int i=1;i<=m;i++){
        int from,to,w;
        scanf("%d%d%d",&from,&to,&w);
        edge[from].push_back({to,w});
    }
    for(int i=1;i<=n;i++){
        if(i==s)d[i]=0;
        else d[i]=0x7fffffff;
    }
    priority_queue<int,vector<int>,greater<int>>q;
    q.push(s);
    while(!q.empty()){
        int x=q.top();q.pop();
        if(vis[x])
            continue;
        vis[x]=1;
        for(int i=0;i<edge[x].size();i++){
            if(d[edge[x][i].to]>d[x]+edge[x][i].dis){
                d[edge[x][i].to]=d[x]+edge[x][i].dis;
                if(!vis[edge[x][i].to])q.push(edge[x][i].to);
            }
        }
    }
    for(int i=1;i<=n;i++)
        printf("%d ",d[i]);
    return 0;
}
2023/1/6 21:39
加载中...