#include #include #include #include #include using namespace std; vector > G[100005]; int n,k; #define MAXN 100005 using lint = long long int; constexpr static int using_mask = 255; typedef int var; int grade[100005],tati[100005]; vector V; int pos; void read() { cin>>n>>k; for(int i=0; i>a>>b>>c; G[a].push_back({b,c}); G[b].push_back({a,c}); grade[a]++; grade[b]++; if(a>b) swap(a,b); tati[b]=a; } tati[1]=0; } bool ok=0; const int64_t INF = 1e9; void dijkstra(int start) { vector dist(n+1,INF); dist[start]=0; int u; set > s; s.insert({dist[start], start}); while(!s.empty()) { u = s.begin() -> second; s.erase(s.begin()); for(auto p : G[u]) if(dist[p.first]>dist[u]+p.second) { s.erase({dist[p.first],p.first}); dist[p.first]=dist[u]+p.second; s.insert({dist[p.first],p.first}); } } for(int y=start+1; y<=n; y++) if(y!=start && dist[y]!=INF) V.push_back(dist[y]); G[start].clear(); } int main() { read(); for(int i=1; i<=n; i++) if(grade[i]>1) dijkstra(i); for(int Shift = 0; Shift < 32; Shift += 8) { array, using_mask + 1>Bucket; for(auto itr : V) Bucket[(itr >> Shift) & using_mask].emplace_back(itr); for(int i = 0, cnt = 0; i <= using_mask; ++i) for(auto& itr : Bucket[i]) V[cnt++] = itr; } if(k>V.size()) cout<<"-1"; else cout<