社区讨论

WA求调,玄关

P2504[HAOI2006] 聪明的猴子参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mmalc58i
此快照首次捕获于
2026/03/03 20:35
上周
此快照最后确认于
2026/03/06 20:50
4 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct Edge{int u,v;double w;}e[20001];
bool cmp(Edge x,Edge y){return x.w<y.w;}
int s[5001],minm,cnt,tot,ans,n,m,a[5001],x[5001],y[5001];
int find(int x){
    return x==s[x]?x:s[x]=find(s[x]);
}
void merge(int x,int y){
    x=find(x);y=find(y);
    if(x!=y) s[x]=s[y];
}
void Kruskal(){
    sort(e+1,e+tot+1,cmp);
    for(int i=1;i<=tot;i++){
        int u=e[i].u,v=e[i].v,w=e[i].w;
        if(find(u)!=find(v)){
            merge(u,v);
            minm=w;
            cnt++;
            if(cnt==n-1) break;
        }
    }
    return;
}
int main(){
    cin>>m;
    for(int i=1;i<=m;i++) cin>>a[i];
    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++){
            double len=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]));
            e[++tot]={i,j,len};
        }
    Kruskal();
    for(int i=1;i<=m;i++)
        if(a[i]>=minm) ans++;
    cout<<ans;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...