55pt代码求调!炫光!
查看原帖
55pt代码求调!炫光!
326254
LonginusMonkey楼主2023/7/25 11:50
#include<bits/stdc++.h>
#define int long long
using namespace std;
struct node{
	int to, w;
};
vector<node> vec[300100];
int vis[300100], dis[300100];
signed main() {
	ios::sync_with_stdio(0); cin.tie(0); 
	int n, m, k;
	cin >> n >> m >> k;
	int s, t;
	cin >> s >> t;
	for(int i=1; i<=m; ++i) {
		int u, v, w;
		cin >> u >> v >> w;
		vec[u].push_back({v,w});
		vec[v].push_back({u,w});
		for(int j=1; j<=k; ++j) {
			vec[v].push_back({u+n*j,0});
			vec[u].push_back({v+n*j,0});
			vec[v+n*j].push_back({u+n*j,w});
			vec[u+n*j].push_back({v+n*j,w});
		}
	}
	for(int i=1; i<=k; ++i) {
		vec[t+n*(i-1)].push_back({t+n*i,0});
	}
	priority_queue<pair<int,int> > que;
	que.push({0, s});
	memset(dis, 0x3f, sizeof dis);
	dis[s] = 0;
	while(!que.empty()) {
		int index = que.top().second; que.pop();
		if(vis[index]) continue;
		vis[index] = 1;
		for(int i=0; i<vec[index].size(); ++i) {
			if(dis[vec[index][i].to] > dis[index] + vec[index][i].w) {
				dis[vec[index][i].to] = dis[index] + vec[index][i].w;	
				que.push({-dis[vec[index][i].to], vec[index][i].to});
			}
		}
	}
	t = t+k*n;
	cout << dis[t];
	return 0;
}
2023/7/25 11:50
加载中...