样例没过,求调
查看原帖
样例没过,求调
1245384
Mzh2012楼主2025/7/30 21:26
#include<bits/stdc++.h>

using namespace std;

#define int long long
#define pii pair<int,pair<int,int> >
const int N = 10001,inf = 1e9;
int dis[N][12],vis[N];
vector<pair<int,int> > g[N];
int n,m,s,t,k;
priority_queue<pii,vector<pii>,greater<pii> > q;

signed main(){
    cin>>n>>m>>k>>s>>t;
    s++,t++;
    for(int i = 1;i<=m;i++){
        int u,v,w;
        cin>>u>>v>>w;
        u++,v++;
        g[u].push_back(make_pair(v,w));
        g[v].push_back(make_pair(u,w));
    }
    for(int i = 1;i<=n;i++){
        for(int j = 1;j<=10;j++){
            dis[i][j] = inf;
        }
    }
    dis[s][0] = 0;
    q.push(make_pair(0,make_pair(s,0)));
    while(!q.empty()){ 
        auto tmp = q.top();
        q.pop();
        int cnt = tmp.second.second,id = tmp.second.first;
        if(vis[dis[id][cnt]]) continue;
        vis[dis[id][cnt]] = 1;
        for(int i = 0;i<g[id].size();i++){
            if(dis[g[id][i].first][cnt]>g[id][i].second+dis[id][cnt]){
                dis[g[id][i].first][cnt] = g[id][i].second+dis[id][cnt];
                q.push(make_pair(dis[g[id][i].first][cnt],make_pair(g[id][i].first,cnt)));
            }
            if(dis[g[id][i].first][cnt+1]>dis[id][cnt] && cnt<k){
                dis[g[id][i].first][cnt+1] = dis[id][cnt];
                q.push(make_pair(dis[g[id][i].first][cnt+1],make_pair(g[id][i].first,cnt+1)));
            }
        }
    }
    int mins = INT_MAX;
    for(int i = 0;i<=k;i++) mins = min(mins,dis[t][i]);
    cout<<mins;

    return 0;
}
2025/7/30 21:26
加载中...