func_code_string: #include <bits/stdc++.h>   namespace IO {   const long long IN_LEN = 1 << 18 | 1;   static char buf[IN_LEN], *s, *t;   inline long long Getchar(void) {     return s == t && (t = (s = buf) + fread(buf, 1, IN_LEN, stdin)),            s == t ? -1 : *s++;   }   template <class T>   inline void read(T& x) {     static long long c, f;     c = Getchar(), x = f = 0;     while (c <  0  || c >  9 ) {       if (c ==  - ) f = 1;       c = Getchar();     }     while (c <=  9  && c >=  0 ) x = x * 10 + c - 48, c = Getchar();     x = f ? -x : x;   }   }  // namespace IO   using IO::read;   using namespace std;   const long long N = 1e5 + 5;   const long long INF = 0x3f3f3f3f3f3f3f3fLL;   long long head[N], eidx, dis[N], n, m, f[N];   struct Edge {     long long nxt, to, val;   } edge[N];   queue<long long> q[N];   priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,                  greater<pair<long long, long long> > >       Q;   void dij(void) {     static long long u, w;     memset(dis, 0x3f, sizeof dis);     Q.push(pair<long long, long long>(dis[1] = 0, 1));     while (!Q.empty()) {       u = Q.top().second, w = Q.top().first;       Q.pop();       if (dis[u] != w) continue;       for (long long i = head[u], v; i; i = edge[i].nxt)         if (dis[v = edge[i].to] > dis[u] + edge[i].val)           Q.push(pair<long long, long long>(dis[v] = dis[u] + edge[i].val, v));     }   }   void bfs(const long long& lim) {     static long long u, mx;     mx = 0;     memset(f, 0x3f, sizeof f);     q[0].push(1), f[1] = 0;     for (long long c = 0; c <= mx; ++c) {       while (!q[c].empty()) {         u = q[c].front();         q[c].pop();         if (f[u] < c) continue;         for (long long i = head[u], v; i; i = edge[i].nxt)           if (f[(v = edge[i].to)] > dis[u] - dis[v] + edge[i].val + f[u]) {             f[v] = dis[u] - dis[v] + edge[i].val + f[u];             if (f[v] <= lim && f[v] < n - 1) q[f[v]].push(v), mx = max(mx, f[v]);           }       }     }   }   signed main(void) {     long long q;     read(n), read(m), read(q);     for (long long i = 1, u, v, w; i <= m; ++i) {       read(u), read(v), read(w);       edge[++eidx] = (Edge){head[u], v, w};       head[u] = eidx;     }     dij();     long long opt, x, y;     while (q--) {       read(opt), read(x);       if (opt == 1)         printf(dis[x] == INF ?  -1 n  :  %lld n , dis[x]);       else {         for (long long i = 1; i <= x; ++i) {           read(y);           ++edge[y].val;         }         bfs(x);         for (long long i = 1; i <= n; ++i) dis[i] = min(INF, dis[i] + f[i]);       }     }     return 0;   }   