求调求调
查看原帖
求调求调
1185284
Linktux楼主2025/6/30 19:23
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
const int inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<ll,int> pli;
#define mp(a,b) make_pair(a,b)
#define fi first
#define se second
int n,m,s;
vector<pli> g[N];
ll dis[N];
void bfs(){
    memset(dis,inf,sizeof(dis));
    dis[s]=0;    
    priority_queue<pli,vector<pli>,greater<pli> > q;
    q.push(mp(0,s));
    while(!q.empty()){
        int d=q.top().fi,x=q.top().se;
        q.pop();
        if(d>dis[x])continue;
        for(pli t:g[x]){
            int cost=t.fi,to=t.se;
            if(dis[to]>dis[x]+cost){
                dis[to]=dis[x]+cost;
                q.push(mp(dis[to],to));
            }
        }
    }
    return;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n>>m>>s;
    for(int i=1,u,v,w;i<=m;++i){
        cin>>u>>v>>w;
        g[u].push_back(mp(w,v));
        g[v].push_back(mp(w,u));
    }
    bfs();
    for(int i=1;i<=n;++i)cout<<dis[i]<<' ';
    return 0;
}

原理就是dijkstra。也是醉了,本来想找个模板题水一下,结果连模板题都过不了。52分(看到有一个红名大佬也是52分,是不是数据卡一些东西)

2025/6/30 19:23
加载中...