Submission
Status:
[P-SSSSSSSSSSSSSSSSSS]
Score: 0
User: Jibhong
Problemset: C.Love Sick
Language: cpp
Time: 0.007 second
Submitted On: 2025-03-27 09:45:54
#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<ll,pii>;
vector<pii>edge[1005];
bool visited[1005][11];
vector<vector<ll>> dist(1005,vector<ll>(1005,9e18));
priority_queue<plpii,vector<plpii>,greater<plpii>>pq;
int main(){
int n,m,q;
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);
}
dist[0][q]=0;
pq.push({0,{0,q}});
while(!pq.empty()){
auto [nownode,pot]=pq.top().second;
pq.pop();
if(visited[nownode][pot])continue;
visited[nownode][pot]=1;
for(auto e:edge[nownode]){
auto [tonode,todist]=e;
if(dist[tonode][pot]>dist[nownode][pot]+todist && !visited[tonode][pot]){
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 && !visited[tonode][pot-1]){
dist[tonode][pot-1]=dist[nownode][pot]-todist;
pq.push({dist[tonode][pot-1],{tonode,pot-1}});
}
}
}
ll out=9e18;
for(auto e:dist[n-1]){
out=min(out,e);
}
cout<<out;
return 0;
}