func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5e5 + 5;   const long long L = 1e18 + 18;   int Z;   struct edge {     int s;     int t;     long long W;     int ind;     edge(int a, int b, long long c, int I) {       s = a;       t = b;       W = c;       ind = I;     }   };   struct cmp {     bool operator()(edge a, edge b) { return a.W > b.W; }   };   long long odl[N];   vector<edge> G[N];   vector<pair<long long, long long> > D[N];   void dfs(int v, int oj, int k);   int main() {     Z = 0;     int n, m, k;     scanf( %d%d%d , &n, &m, &k);     for (long long i = 1; i <= n; i++) odl[i] = L;     for (long long i = 1; i <= m; i++) {       long long a, b, c;       scanf( %lld%lld%lld , &a, &b, &c);       G[a].push_back(edge(a, b, c, i));       G[b].push_back(edge(b, a, c, i));     }     priority_queue<edge, vector<edge>, cmp> kol;     odl[1] = 0;     for (auto z : G[1]) kol.push(z);     while (!kol.empty()) {       edge X = kol.top();       kol.pop();       if (odl[X.t] < L) continue;       odl[X.t] = X.W;       D[X.s].push_back(make_pair(X.t, X.ind));       for (auto z : G[X.t]) {         if (odl[z.t] > X.W + z.W) {           kol.push(edge(z.s, z.t, z.W + X.W, z.ind));         }       }     }     k = min(k, n - 1);     printf( %d n , k);     dfs(1, 1, k);     if (k > 0) printf(  n );   }   void dfs(int v, int oj, int k) {     for (auto z : D[v]) {       if (z.first == oj) continue;       if (Z >= k) break;       printf( %lld  , z.second);       Z++;       dfs(z.first, v, k);     }   }   