Submission

Status:
[PP-SSSSSSSSSSSSSSSSS]

Score: 0

User: mydKN

Problemset: C.Love Sick

Language: cpp

Time: 0.008 second

Submitted On: 2025-03-27 10:36:43

#include<bits/stdc++.h>

using namespace std;

using pii = pair<int, int>;

struct stc{
	int w, t, u;
};

const int maxn = 1e3 + 10;
const int maxk = 15;
const int inf = 2e9;

int n, m, k;
vector<pii> adj[maxn];
bool visited[maxn][maxk];
int low, high, res;

bool ok(int h){
	queue<stc> qu;
	qu.push({h, 0, 0});
	while(!qu.empty()){
		auto [uw, ut, u] = qu.front();
		qu.pop();
		if(u == n-1) return 1;
		for(auto [vw, v] : adj[u]){
			if(ut < k) qu.push({uw + vw, ut + 1, v});
			if(uw > vw) qu.push({uw - vw, ut, v});
		}
	}
	return 0;
}

int main(){
	ios_base::sync_with_stdio(0);cin.tie(0);
	cin >> n >> m >> k;
	for(int i=0;i<m;++i){
		int u, v, w;
		cin >> u >> v >> w;
		adj[u].emplace_back(w, v);
		adj[v].emplace_back(w, u);
		high += w;
	}
	while(low <= high){
		int mid = (low + high) / 2;
		// cout << mid << " ";
		if(ok(mid)){
			high = mid - 1;
			res = high;
		}
		else{
			low = mid + 1;
		}
	}
	cout << res + 1;
}