关于吸氧和TLE的问题
  • 板块P1119 灾后重建
  • 楼主小沐
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/6/1 09:49
  • 上次更新2023/10/28 00:10:19
查看原帖
关于吸氧和TLE的问题
168122
小沐楼主2022/6/1 09:49

已AC,思路是弗洛伊德,但是是吸氧过的(同一份代码),不开O2会T掉3个点,开了O2A了,但是不知道还有什么可以优化的地方,求教! ps:也许有大佬能讲一下O2优化的原理? 代码在这:

#include<bits/stdc++.h>
using namespace std;
int n,m,b,q;
int cnt,head[10005],x_1,y_1,z_1;
struct bb{
	int to,nex,val;
};
bb bian[100005];
int tim[1005],ans[205][205],zan;
void fly(int x,int y,int z){
	for(int k=zan;k<n;k++){
		if(tim[k]>z){
			zan=k-1;
			break;
		}
		for(int i=0;i<n;i++){
			if(i==k)continue;
			for(int j=0;j<n;j++){
				if(j==k)continue;
				if(ans[i][k]+ans[k][j]>=0){
					ans[i][j]=min(ans[i][j],ans[i][k]+ans[k][j]);
				}
			}
		}
	}
}
int main(){
	cin>>n>>m;
	for(int i=0;i<n;i++){
		cin>>tim[i];
	}
	for(int i=0;i<=n;i++){
		for(int j=0;j<=n;j++){
			ans[i][j]=2147483647;
		}
		ans[i][i]=0;
	}
	for(int i=1;i<=m;i++){
		cin>>x_1>>y_1>>z_1;
		ans[x_1][y_1]=ans[y_1][x_1]=z_1;
	}
	cin>>q;
	for(int i=0;i<q;i++){
		cin>>x_1>>y_1>>z_1;
		if(tim[x_1]<=z_1&&tim[y_1]<=z_1){
			if(z_1>=tim[zan+1])fly(x_1,y_1,z_1);
			if(ans[x_1][y_1]!=2147483647)cout<<ans[x_1][y_1]<<endl;
			else cout<<"-1"<<endl;
		}
		else cout<<"-1"<<endl;
	}
	return 0;
}

记录:TLE 吸氧AC

2022/6/1 09:49
加载中...