【bzoj3943】 [Usaco2015 Feb]SuperBull 最大生成树

来源:互联网 发布:手机淘宝个人中心在哪 编辑:程序博客网 时间:2024/06/06 02:08

感觉自己好颓废呀,暴力建边然后暴力生成树就可以了。


#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<iostream>#include<algorithm>#define maxn 4000010using namespace std;struct yts{int x,y;long long w;}e[maxn];int f[2010],a[2010];long long ans;int n,m,num;bool cmp(yts x,yts y){return x.w>y.w;}int find(int x){if (f[x]==x) return x;else return f[x]=find(f[x]);}int main(){scanf("%d",&n);for (int i=1;i<=n;i++) scanf("%d",&a[i]);for (int i=1;i<=n;i++)  for (int j=i+1;j<=n;j++)    e[++num].x=i,e[num].y=j,e[num].w=a[i]^a[j];sort(e+1,e+num+1,cmp);for (int i=1;i<=n;i++) f[i]=i;int cnt=0;for (int i=1;i<=num;i++){int f1=find(e[i].x),f2=find(e[i].y);if (f1!=f2){f[f1]=f2;ans+=e[i].w;cnt++;if (cnt==n-1) break;}}printf("%lld\n",ans);return 0;}


0 0
原创粉丝点击