纯暴力 求调
查看原帖
纯暴力 求调
696996
restart_to_revive楼主2024/11/24 16:59
#include<bits/stdc++.h>
using namespace std;
int c[200010];
int u[200010],v[200010],w[200010];
long long dij[2010];
long long mind[2010][2010];
int x[200010],y[200010];
long long maxv[2010][2010];
int main(){
	//freopen("speaker2.in","r",stdin);
	//freopen("speaker2.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n,q;
	cin>>n>>q;
	for(int i=1;i<=n;i++){
		cin>>c[i];
	}
	for(int i=1;i<n;i++){
		cin>>u[i]>>v[i]>>w[i];
	}
	for(int i=1;i<=q;i++){
		cin>>x[i]>>y[i];
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			dij[j]=0x3f3f3f3f;
		}
		dij[i]=0;
		for(int j=1;j<n;j++){
			dij[v[j]]=min(dij[v[j]],dij[u[j]]+w[j]);
			dij[u[j]]=min(dij[u[j]],dij[v[j]]+w[j]);
		}
		for(int j=1;j<=n;j++){
			if(i==j) mind[i][j]=0;
			else mind[i][j]=dij[j];
			//cout<<mind[i][j]<<" ";
		}
		//cout<<'\n';
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			mind[i][j]=min(mind[i][j],mind[j][i]);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			maxv[i][j]=c[j]-mind[i][j];
			//cout<<maxv[i][j]<<" ";
		}
		//cout<<;
	}
	long long ans=0;
	for(int i=1;i<=q;i++){
		long long maxx=-0x3f3f3f3f;
		for(int j=1;j<=n;j++){
			maxx=max(maxv[x[i]][j]-mind[j][y[i]]+c[y[i]]+c[x[i]],maxx);
			//cout<<maxx<<" ";
		}
		//cout<<'\n';
		cout<<maxx<<'\n';
	}
	//cout<<ans;
	return 0;
}

纯暴力,不知道为什么样例#2过不去

求调 悬2关

2024/11/24 16:59
加载中...