如题,已经调两天了,不知道为啥/kk
/*
writer: houpingze
Problem: 不知名屑题
Knowledge: 垃圾算法
Time: O(过不了)
PS:\CCF/ \CCF/ \CCF/ \CCF/ \CCF/
*/
/*
Note:
*/
#include<bits/stdc++.h>
#define MN 114514
#define reg register int
#define INF (1<<30)
#define pb push_back
#define vc vector
#define fst first
#pragma GCC optimize(3)
#define scd second
#define int long long
#define min(x,y) x>y?y:x
#define max(x,y) x>y?x:y
#define rep(i,x,y) for(int i=x;i<=y;i++)
using namespace std;
int read(){
int res=0,fs=1; char c=getchar();
while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
return res*fs;
}
void print(int x){
if(x<0) { putchar('-'); x=-x;}
if(x>9) print(x/10);
putchar(x%10+'0');
}
int n,cnt,m,a[500010],ans,tmp,k;
typedef pair<int,int> P;
//struct PROBLEM_SOLVER{
// int n,m;
//}solver;
//signed main(){
void py(){
cout<<"YES\n";
}
void pn(){
cout<<"NO\n";
}
map<int,int>t;
struct edge{
int to,nxt,w;
}e[100005];
int hd[100050];
void add(int u,int v,int w){
cnt++;
e[cnt].to=v;
e[cnt].w=w;
e[cnt].nxt=hd[u];
hd[u]=cnt;
}
int dis[114154];
bool vis[114514];
queue<int>q[114514];
void dij(){
priority_queue<P>q;
memset(dis,0x3f,sizeof(dis));
dis[1]=0;
q.push(P(0,1));
while(!q.empty()){
int u=q.top().second,nw=q.top().fst;
q.pop();
if(dis[u]<-nw) continue;
for(register int i=hd[u];i;i=e[i].nxt){
int v=e[i].to;
if(dis[v]>dis[u]+e[i].w){
dis[v]=dis[u]+e[i].w;
q.push(make_pair(-dis[v],v));
}
}
}
}
int f[115141];
void bfs(int c){
int mx=0;
rep(i,0,mx){
while(!q[i].empty()){
int u=q[i].front();
q[i].pop();
if(f[u]<i) continue;
for(register int j=hd[u];j;j=e[j].nxt){
int v=e[j].to;
int w=dis[u]+e[j].w-dis[v];
if(f[v]>f[u]+w){
f[v]=f[u]+w;
if(f[v]<=min(c,n-1)){
q[f[v]].push(v);
mx=max(mx,f[v]);
}
}
}
}
}
}
signed main() {
//ios::sync_with_stdio(false);
cin>>n>>m>>tmp;
rep(i,1,m){
int u=read(),v=read(),w=read();
// add(read(),read(),read());
add(u,v,w);
}
dij();
// cout<<"DIS:"<<dis[1]<<' '<<dis[2]<<' '<<dis[3]<<endl;
while(tmp--){
int op=read(),c=read();
if(op==1){
if(dis[c]<=(1ll<<55)) cout<<dis[c]<<'\n';
else cout<<-1<<'\n';
}else {
rep(i,1,c) {
int u=read();
e[u].w++;
}
memset(f,0x3f,sizeof(f));
f[1]=0;
q[0].push(1);
bfs(c);
int xxx=(1ll<<60);
rep(i,1,n){
dis[i]=min(xxx,f[i]+dis[i]);
}
}
}
return 0;
}