求助!!
查看原帖
求助!!
1237578
Wade_W楼主2024/7/30 16:49
#include<bits/stdc++.h>
#define ll long long
#define RE register
#define max(a,b) (a>b?a:b)
using namespace std;
const int N=2000005;
void read(int &x){
	int flag=1;
	x=0;
	RE char ch=getchar();
	if(ch=='-')flag=-1;
	for(;ch>'9'||ch<'0';)ch=getchar();
	for(;ch<='9'||ch>='0';ch=getchar())x=x*10+ch-48;
	x*=flag;
}
double dist(int x1,int x2,int y1,int y2){
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
struct node{
	int u,v;
	double d;
}e[N];
double maxn;
int m,n,w[N],x[N],y[N],ans,tot,fa[N],item;
bool vis[N];
int find(int x){
	return fa[x]=(fa[x]==x)?x:find(fa[x]);
}
bool cmp(node a,node b){
	return a.d<b.d;
}
int main(){
	read(m);
	for(int i=1;i<=m;i++)read(w[i]);
	read(n);
	for(int i=1;i<=n;i++)scanf("%d%d",&x[i],&y[i]);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			e[++tot].u=i;
			e[tot].v=j;
			e[tot].d=dist(x[i],x[j],y[i],y[j]);
		}
	}
	for(int i=1;i<=n;i++)fa[i]=i;
	sort(e+1,e+tot+1,cmp);
	for(int i=1;i<=tot;i++){
		int fx=find(e[i].u),fy=find(e[i].v);
		if(fx==fy)continue;
		maxn=max(maxn,e[i].d);
		fa[fx]=fy;
		++item;
		if(item==n-1)break;
	} 
	for(int i=1;i<=m;i++)
		if(w[i]>=maxn)
			++ans;
	printf("%d",ans);
	return 0;
}

算法:Kruskal克鲁斯卡尔

问题:输入无法结束

测试结果:自然全是TLE

2024/7/30 16:49
加载中...