func_code_string: #include <bits/stdc++.h>   long long int const MOD = 1000000007;   long long int const N = 1000005;   long long int const LN = 20;   long long int const inf = 8e18;   using namespace std;   long long int n, m, a[N];   vector<pair<long long int, long long int> > v[N];   struct data {     long long int d, second, prev, idx;     data(long long int d, long long int second, long long int prev,          long long int idx) {       this->d = d;       this->second = second;       this->prev = prev;       this->idx = idx;     }     bool operator<(data other) const {       if (d != other.d) return d < other.d;       if (second != other.second) return second < other.second;       if (prev != other.prev) return prev < other.prev;       if (idx != other.idx) return idx < other.idx;       return 0;     }   };   int main() {     ios::sync_with_stdio(false);     cin.tie(NULL);     long long int n, m, k;     cin >> n >> m >> k;     for (long long int i = 1; i <= m; i++) {       long long int a, b, c;       cin >> a >> b >> c;       v[a].push_back({c, b});       v[b].push_back({c, a});     }     for (long long int i = 1; i <= n; i++) sort(v[i].begin(), v[i].end());     set<pair<long long int, long long int> > st;     set<data> q;     for (long long int i = 1; i <= n; i++) {       st.insert({i, i});       q.insert(data(v[i][0].first, i, i, 0));     }     k = 2 * k;     while (!q.empty()) {       data cur = *q.begin();       q.erase(cur);       long long int nxt = v[cur.prev][cur.idx].second;       if (st.find({cur.second, nxt}) == st.end()) {         st.insert({cur.second, nxt});         k--;         if (k == 0) {           cout << cur.d <<   n ;           return 0;         }         q.insert(data(cur.d + v[nxt][0].first, cur.second, nxt, 0));       }       if (cur.idx + 1 < v[cur.prev].size())         q.insert(data(             cur.d - v[cur.prev][cur.idx].first + v[cur.prev][cur.idx + 1].first,             cur.second, cur.prev, cur.idx + 1));     }     return 0;   }   