91分求助(玄关)
查看原帖
91分求助(玄关)
746240
linmoxi楼主2025/1/15 20:43
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+5;
int t[N][10];
vector<int>d[N],e[N];
int n,m,k;
struct xy{
    int x;
    int y;
};
void bfs(int g){
    queue<xy>q;
    xy j;
    j.x=g;
    j.y=1;
    q.push(j);
    t[g][1]=0;
    while(q.size()){
        xy u=q.front();
        q.pop();
        for(int i=0;i<d[u.x].size();i++){
            if(t[d[u.x][i]][u.y]>t[u.x][u.y]+e[u.x][i]){
                t[d[u.x][i]][u.y]=t[u.x][u.y]+e[u.x][i];
                xy z;
                z.x=d[u.x][i];
                z.y=u.y;
                q.push(z);
            }
            if(u.y<k+1&&t[d[u.x][i]][u.y+1]>t[u.x][u.y]){
                t[d[u.x][i]][u.y+1]=t[u.x][u.y];
                xy z;
                z.x=d[u.x][i];
                z.y=u.y+1;
                q.push(z);
            }
            /*for(int i=1;i<=k+1;i++){
            	for(int j=1;j<=n;j++){
            	    if(t[j][i]>1000)cout<<"N ";
                    else cout<<t[j][i]<<" ";
                }
                cout<<endl;
            }
            cout<<endl;*/
        }
    }
    return;
}
int main(){
	cin>>n>>m>>k;
	int s,y;
	cin>>s>>y;
	s++,y++;
    for(int i=1;i<=k+1;i++){
		for(int j=1;j<=n;j++){
            t[j][i]=1e9;
        }
	}
	for(int i=1;i<=m;i++){
		int a,b,c;
		cin>>a>>b>>c;
		a++,b++;
        d[a].push_back(b);	
        e[a].push_back(c);
        d[b].push_back(a);	
        e[b].push_back(c);
    }
    bfs(s);
    int cnt=1e9;
    for(int i=1;i<=k+1;i++){
        cnt=min(cnt,t[y][i]);
    }
    cout<<cnt;
	return 0;
}
2025/1/15 20:43
加载中...