45pts马蜂良好玄关*1
查看原帖
45pts马蜂良好玄关*1
981592
Damon77楼主2025/6/24 16:36
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ls p<<1
#define rs p<<1|1
#define pb push_back

const ll N=2e6+10;
const ll M=2e3+10;
const ll inf=1e18;
const ll mod=1e9+7;

inline ll lowbit(ll x){
    return x&(-x);
}
ll n,m,k;
ll s,t;
struct edge{
    ll v,w;
};
vector<edge> g[N];
ll dis[N];
struct node{
    ll d,x;
};
bool operator<(const node&a,const node&b){
    return a.d>b.d;
}
priority_queue<node> q;
ll vis[N];
inline void dij(){
    memset(dis,0x7f,sizeof dis);
    //for(int i=0;i<=k;i++) dis[s+i*n]=0;
    dis[s]=0;
    q.push({0,s});
    while(!q.empty()){
        node x=q.top();
        q.pop();
        if(vis[x.x]) continue;
        vis[x.x]=1;
        for(auto y:g[x.x]){
            if(dis[y.v]>dis[x.x]+y.w){
                dis[y.v]=dis[x.x]+y.w;
                q.push({dis[y.v],y.v});
            }
        }
    }
}
ll ans=inf;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin>>n>>m>>k;
    cin>>s>>t;
    s++;
    t++;
    for(int i=1;i<=m;i++){
        ll a,b,c;
        cin>>a>>b>>c;
        a++;
        b++;
        for(int j=1;j<=k;j++){
            g[a+(k-1)*n].pb({b+k*n,0});
            g[b+(k-1)*n].pb({a+k*n,0});
            g[a+k*n].pb({b+k*n,c});
            g[b+k*n].pb({a+k*n,c});
        }
        g[a].pb({b,c});
        g[b].pb({a,c});
    }
    dij();
    for(int i=0;i<=k;i++) ans=min(ans,dis[t+n*i]);
    cout<<ans<<"\n";
    return 0;
} 

别忘了@我

2025/6/24 16:36
加载中...