WA on #7 too,求调
查看原帖
WA on #7 too,求调
815807
zouyuhao20120225楼主2024/7/17 15:14
#include<algorithm>
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;

long long n,m,fa[155];
double d[155][155],x[155],y[155]; 
void Floyd(){
	for(int k=1;k<=n;k++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
		}
	}
}
int find(int x){
	if(fa[x]==x) return x;
	fa[x]=find(fa[x]);
	return fa[x];
}
int main(){
	cin>>n;
	if(n==1){
		cout<<0;
		return 0;
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			d[i][j]=0x3f3f3f3f;
		}
	} 
	for(int i=1;i<=n;i++) d[i][i]=0.0;
	for(int i=1;i<=n;i++){
		cin>>x[i]>>y[i];
	}
	for(int i=1;i<=n;i++) fa[i]=i;
	char C;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			cin>>C;
//			cout<<"###"<<C<<"###";
			if(C=='1'){
				d[i][j]=sqrt((x[i]*1.0-x[j]*1.0)*(x[i]*1.0-x[j]*1.0)+(y[i]*1.0-y[j]*1.0)*(y[i]*1.0-y[j]*1.0));
				fa[find(i)]=find(j);
			} 
		}
	} 
	double mn=0x3f3f3f3f;
	Floyd();
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(fa[find(i)]!=fa[find(j)]){
				double mai=-1,maj=-1;
				for(int k=1;k<=n;k++){
					if(d[i][k]<0x3f3f3f3f) mai=max(mai,d[i][k]);
					if(d[j][k]<0x3f3f3f3f) maj=max(maj,d[j][k]);
				}
				mn=min(mn,mai*1.0+maj*1.0+sqrt((x[i]*1.0-x[j]*1.0)*(x[i]*1.0-x[j]*1.0)+(y[i]*1.0-y[j]*1.0)*(y[i]*1.0-y[j]*1.0)));
			}
		}
	}
	cout<<fixed<<setprecision(6)<<mn;
	return 0;
}

看了讨论区内几个因#7而厥烂的警钟,没看出个所以然,所以求调QWQ

2024/7/17 15:14
加载中...