WA 80分求助 ,悬关
查看原帖
WA 80分求助 ,悬关
760018
蟋蟀喵~~STLlover楼主2023/7/19 19:37
#include <bits/stdc++.h>
using namespace std;
double a[10001][10001],INF = 1e12,r[3],tmp[10000001];
int n,m,x[100001],y[100001],t[10001][3],temp[1000001],l1,l2;
char tt;
double f(int a,int b,int c,int d){
	return sqrt(pow((a - b),2) + pow((c - d),2));
}
void dfs(int c){
	temp[c] = 1;
	for(int i = 1; i <= n; i++){
		if(a[c][i] != INF && !temp[i]){
			dfs(i);
		}
	}
}
int main(){
	cin >> n;
	for(int i = 1; i <= n; i++){
		cin >> x[i] >> y[i];
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			cin >> tt;
			if(tt == '1'){
				m++;
				a[i][j] = f(x[i],x[j],y[i],y[j]);
			}else{
				a[i][j] = INF;
			}
		}
	}
	dfs(1);
	for(int i = 1; i <= n; i++){
		if(temp[i]){
			t[++l1][1] = i;
		}else{
			t[++l2][2] = i;
		}
	}
	for(int k = 1; k <= n; k++){
		for(int i = 1; i <= n; i++){
			for(int j = 1; j <= n; j++){
				if(i != j)
				a[i][j] = min(a[i][j],a[i][k] + a[k][j]);
				else a[i][j] = 0;
			}
		}
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++){
			if(a[i][j] < INF){
				tmp[i] = max(tmp[i],a[i][j]);
			}
		}
	}
	r[2] = INF;
	for(int i = 1; i <= l1; i++){
		for(int j = 1; j <= l2; j++){
			r[2] = min(r[2],tmp[t[i][1]] + tmp[t[j][2]] + f(x[t[i][1]],x[t[j][2]],y[t[i][1]],y[t[j][2]]));
		}
	}
	printf("%.6lf",max(r[1],r[2]));
	return 0;
}

WA on #6、#7

2023/7/19 19:37
加载中...