性感萌新妹子在线求助(RE了QAQ)
查看原帖
性感萌新妹子在线求助(RE了QAQ)
243382
师父的小兔叽楼主2019/10/3 15:36

B应该不会为0吧...数组够大了,没理由RE啊? 大佬们救救孩子8

#include<bits/stdc++.h>
using namespace std;
const int maxn=2010;
int t,n,cnt,tot,to[maxn],nex[maxn],fir[maxn],w[maxn],x[maxn],y[maxn],p[maxn],vis[maxn],val[maxn][maxn],fa[maxn];
double dis,ans,A,B,sum;
struct edge{
	int u,v;
	double c;
	friend bool operator<(edge a,edge b){
		return a.c<b.c;
	}
}e[2000005];
void add(int u,int v,int c){
	to[++cnt]=v;
	nex[cnt]=fir[u];
	fir[u]=cnt;
	w[cnt]=c;
}
int find(int a){
	if(a==fa[a]) return a;
	return fa[a]=find(fa[a]);
}
int merge(int a,int b){
	a=find(a),b=find(b);
	if(a^b) fa[a]=b; 
}
double dist(int i,int j){
	return sqrt((double)(x[i]-x[j])*(x[i]-x[j])+(double)(y[i]-y[j])*(y[i]-y[j]));
}
int kruscal(){
	sort(e+1,e+tot+1);
	for(int i=1;i<=n;i++) fa[i]=i;
	for(int i=1;i<=tot;i++){
		int u=find(e[i].u),v=find(e[i].v);
		if(u!=v){
			merge(u,v);
			add(e[i].u,e[i].v,e[i].c);
			add(e[i].v,e[i].u,e[i].c);
			sum+=e[i].c;
		}
	}
}
int dfs(int rt,int u){
	vis[u]=1;
	for(int i=fir[u];i;i=nex[i]){
		int v=to[i];
		if(!vis[v]){
			val[rt][v]=max(val[rt][u],w[i]);
			dfs(rt,v);
		}
	}
}
void clear(){
	ans=cnt=tot=sum=0;
	memset(fir,0,sizeof(fir));
	memset(w,0,sizeof(w));
}
int main(){
	scanf("%d",&t);
	while(t--){
		clear();
		scanf("%d",&n);
		for(int i=1;i<=n;i++)
			scanf("%d%d%d",&x[i],&y[i],&p[i]);
		for(int i=1;i<n;i++){
			for(int j=i+1;j<=n;j++){
				dis=dist(i,j);
				e[++tot]=((edge){i,j,dis});
			}
		}
		kruscal();
		for(int i=1;i<=n;i++){
			memset(vis,0,sizeof(vis));
			dfs(i,i);
		}
		for(int i=1;i<n;i++)
			for(int j=i+1;j<=n;j++){
				A=p[i]+p[j],B=sum-val[i][j];
				ans=max(ans,A/B);
			}
		printf("%.2lf\n",ans);
	}
	return 0;
}
2019/10/3 15:36
加载中...