玄学F题调了两个小时了还是WA*7
原题链接
#include<bits/stdc++.h>
#define ll long long
#define endl '\n'
#define up(i,j,k,l) for(int i=j;i<=k;i+=l)
#define down(i,j,k,l) for(int i=j;i>=k;i-=l)
using namespace std;
const int N=3e2+10,Q=2e5+10;
int n,m,q;
ll a[N][N],d[N];
int pd,x,y;
struct node{
int u,v;
ll w;
};
node c[Q];
struct cx{
int p,x,y;
};
cx e[Q];
vector<ll> ans;
bool f[Q];
void solve()
{
cin>>n>>m>>q;
up(i,0,N-1,1){
up(j,0,N-1,1){
a[i][j]=1e15;
}
}
int u,v;
ll w;
up(i,1,m,1){
cin>>u>>v>>w;
c[i]={u,v,w};
}
up(i,1,q,1){
cin>>pd;
if(pd==1){
cin>>x;
e[i]={pd,x,0};
f[x]=true;
}
else{
cin>>x>>y;
e[i]={pd,x,y};
}
}
up(i,1,n,1){
a[i][i]=0;
}
up(i,1,m,1){
if(f[i]==false){
a[c[i].u][c[i].v]=min(a[c[i].u][c[i].v],c[i].w);
a[c[i].v][c[i].u]=c[i].w;
}
}
up(k,1,n,1){
up(i,1,n,1){
up(j,1,n,1){
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
down(i,q,1,1){
if(e[i].p==1){
a[c[e[i].x].u][c[e[i].x].v]=min(a[c[e[i].x].u][c[e[i].x].v],c[e[i].x].w);
a[c[e[i].x].v][c[e[i].x].u]=c[e[i].x].w;
up(j,1,n,1){
up(k,1,n,1){
a[j][k]=min(a[j][k],a[j][c[e[i].x].u]+a[c[e[i].x].v][k]+c[e[i].x].w);
}
}
up(j,1,n,1){
up(k,1,n,1){
a[j][k]=min(a[j][k],a[j][c[e[i].x].v]+a[c[e[i].x].u][k]+c[e[i].x].w);
}
}
}
else{
ans.push_back(a[e[i].x][e[i].y]);
}
}
reverse(ans.begin(),ans.end());
for(ll fw:ans){
if(fw==1e15){
cout<<-1;
}
else{
cout<<fw;
}
cout<<endl;
}
return;
}
int main()
{
int _=1;
while(_--){
solve();
}
return 0;
}