55分求调
查看原帖
55分求调
826847
__hanzhenhong__楼主2025/6/18 19:26
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
using namespace std;
#define ll long long
const ll N=1e4+10;
ll dis[11*N];
ll n,m,k,st,ed;
bool vis[11*N];
struct pst{
	ll v,w;
};
vector<pst> g[N*11];
priority_queue<pair<ll,ll>> que;
void dij(ll s)
{
	memset(dis,0x3f,sizeof(dis));
	dis[s]=0;
	que.push({0,s});
	while(!que.empty())
	{
		ll x=que.top().second;
		que.pop();
		if(!vis[x])
		{
			vis[x]=true;
			for(int i=0;i<g[x].size();i++)
			{
				pst k=g[x][i];
				ll y=k.v;
				ll z=k.w;
				if(dis[x]+z<dis[y])
				{
					dis[y]=dis[x]+z;
					que.push(make_pair(-dis[y],y));
				}
			}
		}
	}
	return;
}
int main()
{
	cin>>n>>m>>k>>st>>ed;
	while(m--)
	{
		int u,v,w;
		cin>>u>>v>>w;
		for(int i=0;i<=k;i++)
		{
			g[u+i*n].push_back((pst){v+i*n,w});
			g[v+i*n].push_back((pst){u+i*n,w});
			if(i!=k)
			{
				g[u+i*n].push_back((pst){v+(i+1)*n,0});
				g[v+i*n].push_back((pst){u+(i+1)*v,0});
			}
		}
	}
	dij(st);
	ll ans=0x3f3f3f3f3f3f3f3f;
	for(int i=0;i<=k;i++)
	{
		ans=min(ans,dis[ed+i*n]);
	}
	cout<<ans;
	return 0;
}
2025/6/18 19:26
加载中...