P2901 k短路求助 万般感谢
  • 板块题目总版
  • 楼主Beta_Theta
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/7/15 16:49
  • 上次更新2024/7/15 17:38:10
查看原帖
P2901 k短路求助 万般感谢
965461
Beta_Theta楼主2024/7/15 16:49
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> pll;
ll n, m, k, u, v, w, dis1[1025], dis2[1025], vis[1025];
priority_queue<pll, vector<pll>, greater<pll>> q;
vector<pll> g[1025], e[1025];
void dijkstra() {
	memset(dis2, 0x3f, sizeof dis2);
	dis2[1] = 0;
	q.push({0, 1});
	while (!q.empty()) {
		u = q.top().second;
		q.pop();
		if (vis[u]) continue;
		vis[u] = 1;
		for (auto a : e[u]) {
			v = a.first, w = a.second;
			if (dis2[u] + w < dis2[v]) {
				dis2[v] = dis2[u] + w;
				q.push({dis2[v], v});
			}
		}
	}
}
void A() {
	q.push({dis2[n], n});
	while (!q.empty()) {
		u = q.top().second;
		q.pop();
		if (u == 1) {
			cout << dis1[1] << "\n";
			if (!(--k)) exit(0);
		}
		for (auto a : g[u]) {
			v = a.first, w = a.second;
			dis1[v] = dis1[u] + w;
			q.push({dis1[v] + dis2[v], v});
		}
	}
}
int main() {
	cin >> n >> m >> k;
	for (int i = 1; i <= m; i++) {
		cin >> u >> v >> w;
		g[u].push_back({v, w});
		e[v].push_back({u, w});
	}
	dijkstra();
	A();
	for (int i = 1; i <= k; i++) cout << "-1\n";
	return 0;
}

就AC了一个测试点

2024/7/15 16:49
加载中...