Submission
Status:
[PPPPPPPPPPPPPPPPPPPP]
Score: 100
User: Jibhong
Problemset: C.Love Sick
Language: cpp
Time: 0.011 second
Submitted On: 2025-03-27 11:26:48
#include <bits/stdc++.h>
using namespace std;
#define F first
#define S second
using ll = long long;
using pii = pair<int,int>;
using plpii = pair<int,pii>;
vector<pii>edge[1005];
int n,m,q;
bool ok(int x){
bool visited[1005][11]={};
vector<vector<int>> dist(1005,vector<int>(11,1e9));
priority_queue<plpii,vector<plpii>,greater<plpii>>pq;
dist[0][q]=0;
pq.push({0,{0,q}});
while(!pq.empty()){
ll nowdist=pq.top().first;
auto [nownode,pot]=pq.top().second;
pq.pop();
if(nowdist>=x)continue;
if(nownode==n-1)return 1;
for(auto e:edge[nownode]){
auto [tonode,todist]=e;
if(dist[tonode][pot]>dist[nownode][pot]+todist && dist[nownode][pot]+todist<x){
dist[tonode][pot]=dist[nownode][pot]+todist;
pq.push({dist[tonode][pot],{tonode,pot}});
}
if(!pot)continue;
if(dist[tonode][pot-1]>dist[nownode][pot]-todist){
dist[tonode][pot-1]=dist[nownode][pot]-todist;
pq.push({dist[tonode][pot-1],{tonode,pot-1}});
}
}
}
return 0;
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m>>q;
for(int i=0;i<m;++i){
int u,v,w;
cin>>u>>v>>w;
edge[u].emplace_back(v,w);
edge[v].emplace_back(u,w);
}
int ll=1,rr=1e9;
while(ll<rr){
int mm=(ll+rr)/2;
// cout<<ok(mm)<<'<'<<mm<<'\n';
if(ok(mm))rr=mm;
else ll=mm+1;
}
cout<<ll;
return 0;
}