社区讨论
70分求调
P9751[CSP-J 2023] 旅游巴士参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mhj35wyh
- 此快照首次捕获于
- 2025/11/03 19:58 4 个月前
- 此快照最后确认于
- 2025/11/03 19:58 4 个月前
CPP
#include <bits/stdc++.h>
using namespace std;
#define int unsigned long long
const int N = 1e4 + 10;
#define pii pair <int, int>
#define mk make_pair
#define ps push
int n, m, k;
struct way {
int to, w;
};
vector <way> G[N];
int dis[N];
bool vis[N];
void dij () {
for (int i = 1; i <= n; i++) dis[i] = INT_MAX;
// memset (dis, 0x3f, sizeof dis);
dis[1] = k;
// cout << dis[n] << "\n";
priority_queue <pii, vector <pii>, greater <pii> > q;
q.ps (mk (k, 1));
while (!q.empty ()) {
auto [z, u] = q.top (); q.pop ();
if (vis[u]) continue;
vis[u] = true;
// cout << u << "\n";
for (auto [v, w] : G[u]) {
if (dis[u] >= w) {
// cout << u << ' ' << v << "\n";
// cout << dis[v] << ' ' << dis[u] << "\n";
if (dis[v] > dis[u] + 1) {
dis[v] = dis[u] + 1;
q.ps (mk (dis[v], v));
}
} else {
if (dis[v] > w + 1) {
dis[v] = w + 1;
q.ps (mk (dis[v], v));
}
}
}
}
if (dis[n] == INT_MAX) cout << "-1\n";
else cout << ((dis[n] + (k - 1)) / k) * k << "\n";
}
signed main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m >> k;
for (int i = 1; i <= m; i++) {
int u, v, w; cin >> u >> v >> w;
G[u].push_back ({v, w});
}
dij ();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...