求调
  • 板块灌水区
  • 楼主again_q
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/8/6 22:10
  • 上次更新2024/8/7 07:48:59
查看原帖
求调
723168
again_q楼主2024/8/6 22:10

P3371 爆0

#include<bits/stdc++.h>
using namespace std;
const int N=100100;
struct node{
    int v,w;
    bool operator <(const node &x)const{
        return v>x.v;
    }
};
struct edge{
    int ed,next,v;
}b[2*N];
int n,m,s,dis[N],vis[N],tot=0,nbs[N];
priority_queue<node> q;
void add(int x,int y,int z){
    tot++;
    b[tot].next=nbs[x];
    b[tot].ed=y;
    b[tot].v=z;
    nbs[x]=tot;
}
void di(int s){
    memset(dis,0x3f,sizeof(dis));
    dis[s]=0;
    q.push({0,s});
    while (!q.empty()) {
        int u=q.top().w;
        q.pop();
        if(vis[u])continue;
        vis[u]=1;
        for(int x=nbs[u];x;x=b[x].next){
            int k=b[x].ed;
            if(dis[k]>dis[u]+b[x].v){
                dis[k]=dis[u]+b[x].v;
                q.push({dis[k],k});
            }
        }
    }
}

int main(){
    cin>>n>>m>>s;
    for(int i=1;i<=m;i++){
        int x,y,z;
        cin>>x>>y>>z;
        add(x,y,z);add(y,x,z);
    }
    di(s);
    for(int i=1;i<=n;i++)cout<<dis[i]<<" ";
    return 0;
}

2024/8/6 22:10
加载中...