func_code_string: #include <bits/stdc++.h>   using namespace std;   inline int read(int x = 0, int f = 1, char ch =  0 ) {     while (!isdigit(ch = getchar()))       if (ch ==  - ) f = -1;     while (isdigit(ch)) x = x * 10 + ch -  0 , ch = getchar();     return f * x;   }   const int N = 1e5 + 5;   int head[N], ver[N], nxt[N], edge[N];   int n, m, Q, tot;   long long d[N], f[N], t;   bool v[N];   inline void add(int x, int y, int z) {     ver[++tot] = y;     nxt[tot] = head[x];     head[x] = tot;     edge[tot] = z;   }   inline void dij() {     priority_queue<pair<long long, int> > q;     memset(d, 0x3f, sizeof(d));     d[1] = 0;     q.push(make_pair(0, 1));     while (q.size()) {       int x = q.top().second;       q.pop();       if (v[x]) continue;       v[x] = 1;       for (register int i = head[x]; i; i = nxt[i]) {         int y = ver[i];         if (d[y] <= d[x] + edge[i]) continue;         d[y] = d[x] + edge[i];         q.push(make_pair(-d[y], y));       }     }   }   queue<int> q[N];   inline void work(int maxn) {     memset(f, 0x3f, sizeof(f));     f[1] = 0;     q[0].push(1);     for (register int now = 0; now <= t; ++now)       while (q[now].size()) {         int x = q[now].front();         q[now].pop();         if (f[x] < now) continue;         for (register int i = head[x]; i; i = nxt[i]) {           int y = ver[i], z = d[x] + edge[i] - d[y];           if (f[y] <= f[x] + z) continue;           f[y] = f[x] + z;           if (f[y] > maxn) continue;           q[f[y]].push(y);           t = max(t, f[y]);         }       }     for (register int i = (1); i <= (n); ++i) d[i] = min(d[0], d[i] + f[i]);   }   int main() {     n = read();     m = read();     Q = read();     for (register int i = (1); i <= (m); ++i) {       int x = read(), y = read(), z = read();       add(x, y, z);     }     dij();     while (Q--) {       int op = read();       if (op == 1) {         int x = read();         printf( %lld n , d[x] >= d[0] ? -1 : d[x]);       } else {         int c = read(), k;         for (register int i = (1); i <= (c); ++i) k = read(), ++edge[k];         work(min(c, n - 1));       }     }     return 0;   }   