Submission
Status:
[PP-SSSSSSSSSSSSSSSSS]
Score: 0
User: njoop
Problemset: C.Love Sick
Language: cpp
Time: 0.029 second
Submitted On: 2025-01-05 17:44:27
#include <bits/stdc++.h>
#define int long long
#define ti tuple<int, int, int>
using namespace std;
int n, m, k, u, v, w;
vector<pair<int, int>> g[1010];
priority_queue<ti> pq;
int dis[1010][11];
bool solve(int val) {
for(int i=0; i<1010; i++) {
for(int j=0; j<11; j++) {
dis[i][j] = 0;
}
}
dis[0][0] = val;
pq.push({val, 0, 0});
while(pq.size()) {
int cw = get<0>(pq.top());
int cn = get<1>(pq.top());
int cl = get<2>(pq.top());
pq.pop();
if(dis[cn][cl] > cw || cl > k || cw < 0) continue;
dis[cn][cl] = cw;
for(auto i: g[cn]) {
int nn = i.first;
int nw = i.second;
if(cw-nw > dis[nn][cl] && cw-nw > 0) {
dis[nn][cl] = cw-nw;
pq.push({cw-nw, nn, cl});
}
if(cw+nw > dis[nn][cl+1] && cw+nw > 0) {
dis[nn][cl+1] = cw+nw;
pq.push({cw+nw, nn, cl+1});
}
}
}
return !dis[n-1][k];
}
signed main() {
cin >> n >> m >> k;
int l=0, r=1e18;
while(m--) {
cin >> u >> v >> w;
g[u].push_back({v, w});
g[v].push_back({u, w});
}
while(l < r) {
int mid = (l+r)/2;
if(solve(mid)) {
l = mid+1;
} else {
r = mid;
}
}
cout << l;
return 0;
}