10.12 atcoder 求调
  • 板块灌水区
  • 楼主CNzzc
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/12 23:16
  • 上次更新2024/10/13 10:36:37
查看原帖
10.12 atcoder 求调
750689
CNzzc楼主2024/10/12 23:16

玄学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){
		//cout<<"ans:";
		if(fw==1e15){
			cout<<-1;
		}
		else{
			cout<<fw;
		}
		cout<<endl;
	}
	return;
}
int main()
{
    //ios::sync_with_stdio(false);
	//cin.tie(0);
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	int _=1;
	//cin>>_;
	while(_--){
		solve();
	}
	return 0;
}
2024/10/12 23:16
加载中...