1 solutions
-
-1
int n, m, k; void dij() { priority_queue<node> q; memset(dis, 0x3f, sizeof(dis)); memset(vis, 0, sizeof(vis)); dis[s] = 0; q.push({s, 0}); while (q.size()) { int u = q.top().x; q.pop(); if (vis[u]) continue; vis[u] = true; for (auto v : e[u]) if (dis[v] > max(dis[u], val[i])) { dis[v] = max(dis[u], val[i]); q.push({v, dis[v]}); } } } int main() { cin >> n >> m >> k; for (int i = 1; i <= m; i = -~i) { int u, v, w; cin >> u >> v >> w; e[u].push_back({v, w}); e[v].push_back({u, w}); for (int i = 1; i <= k; i = -~i) { e[i * n + u].push_back({i * n + v, w}); e[i * n + v].push_back({i * n + u, w}); e[(i - 1) * n + u].push_back({i * n + v, 0}); e[(i - 1) * n + v].push_back({i * n + u, 0}); } } for (int i = 1; i <= n; i = -~i) for (int j = 1; j <= k; j = -~j) e[(j - 1) * n + i].push_back({j * n + i, 0}); dij(); if (dis[(k + 1) * n] != 0x3f3f3f3f) cout << dis[(k + 1) * n]; else cout << -1; return 0; }
- 1
Information
- ID
- 6029
- Time
- 1000ms
- Memory
- 125MiB
- Difficulty
- 6
- Tags
- # Submissions
- 277
- Accepted
- 39
- Uploaded By