func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5e3 + 2, M = 1e5 + 5;   int n, m, k, par[N];   vector<int> vec;   struct edge {     int u, v, i;     long double w;   } e[M];   int getPar(int u) { return ~par[u] ? par[u] = getPar(par[u]) : u; }   bool check(double x) {     for (int i = 0; i < m; i++) e[i].w += (!e[i].u || !e[i].v) * x;     memset(par, -1, sizeof par);     sort(e, e + m,          [](edge x, edge y) { return x.w != y.w ? x.w < y.w : x.i < y.i; });     int cnt = 0;     for (int i = 0, x, y; i < m; i++)       if ((x = getPar(e[i].u)) ^ (y = getPar(e[i].v))) {         par[x] = y;         vec.push_back(e[i].i);         cnt += (!e[i].u || !e[i].v);       }     for (int i = 0; i < m; i++) e[i].w -= (!e[i].u || !e[i].v) * x;     if (cnt == k) {       cout << n - 1 << endl;       for (int x : vec) cout << x + 1 <<    ;       exit(0);     }     vec.clear();     return cnt < k;   }   int main() {     ios_base::sync_with_stdio(0), cin.tie(0);     cin >> n >> m >> k;     for (int i = 0; i < m; i++) {       cin >> e[i].u >> e[i].v >> e[i].w;       e[i].u--, e[i].v--, e[i].i = i;     }     for (double l = -1e9, r = 1e9, i = 0; i < 100; i++) {       double mid = (l + r) / 2;       (check(mid) ? r : l) = mid;     }     cout << -1 << endl;   }   