您的位置:首页 > Web前端

bzoj3943[Usaco2015 Feb]SuperBull

2017-03-13 20:51 288 查看
分析:这题是真的不错。。我想了半天根本就没往生成树方面想。。倒是想到连边,但是以为直接排序以后取最大就可以了,发现顺序好像也会影响。因为每走一条边就要去掉一个点,这不是裸的最大生成树么。。看来以后还是要把题目模型进一步化简。。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N=1e5+5;;
int n;
typedef long long ll;
ll ans;
int a
;
void prim()
{
static int f
;
static bool bz
;
fo(i,1,n)
{
int k=0;
fo(j,1,n)
if (!bz[j]&&f[j]>=f[k])
k=j;
bz[k]=1,ans+=f[k];
fo(j,1,n)
f[j]=max(f[j],a[k]^a[j]);
}
}
int main()
{
scanf("%d",&n);
fo(i,1,n)scanf("%d",&a[i]);
prim();
printf("%lld\n",ans);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: