总的来说,

这道题只考查了单纯的建图和最大生成树

但这却是蓝题(问号


题意

题意的理解比较麻烦

简单说就是 n 支队伍比赛,i 号队伍和 j 号队伍比赛可获得 i ^ j 的分数,然后其中一支队伍会输,退出比赛,问当场上只有一支队伍的时候分数最大是多少


分析

这么看似乎比较麻烦,那我们转化一下:

  • i 号队伍和 j 号队伍比赛可以看做从 i 向 j 连了一条边,边权就是 i ^ j
  • 其中一支队伍会输,退出比赛,也就是不能出现环
  • 求最大分数也就是在剩下的无环图中找出最大的 n - 1 条边的权值和

证明:

如果可以出现环,那么输掉的球队就可以再次进行比赛,也就是说没有输掉的球队了,而且这样得分也会重复累加

这样我们就可以看出这就是求一个最大生成树的树边和


最后

记得开 long long

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
#include<queue>
#include<algorithm>
#define maxn 5005000 using namespace std; long long n,m,u[maxn],tot,edge_tot,a,b[maxn],cnt;
long long dfn[maxn],low[maxn],sum,ans,head[maxn],fa[maxn]; struct edge{
long long fr,to,nxt,dis;
}e[maxn*2]; inline void add(long long fr,long long to,long long dis){
e[++edge_tot].to=to;
e[edge_tot].dis=dis;
e[edge_tot].fr=fr;
e[edge_tot].nxt=head[fr];
head[fr]=edge_tot;
} inline long long Get_Father(long long x){
if(fa[x]==x) return x;
return fa[x]=Get_Father(fa[x]);
} inline void ys(long long x,long long y){
x=Get_Father(x);
y=Get_Father(y);
if(x!=y);
fa[y]=x;
} inline bool pd(long long x,long long y){
if(Get_Father(x)==Get_Father(y)) return true;
else return false;
} inline long long cp(edge a,edge b){
return a.dis>b.dis;
} int main(){
scanf("%d",&n);
for(long long i=1;i<=n;i++){
scanf("%d",&u[i]);
b[i]=i;
fa[i]=i;
}
for(long long i=1;i<n;i++){
for(long long j=i+1;j<=n;j++){
long long c=u[i]^u[j];
add(i,j,c);
sum++;
}
} sort(e+1,e+sum+1,cp); for(long long i=1;i<=sum;i++){
// cout<<e[i].fr<<" "<<e[i].to<<" "<<e[i].dis<<" "<<ans<<endl;
if(!pd(e[i].fr,e[i].to)){
ys(e[i].fr,e[i].to);
ans+=e[i].dis;
cnt++;
}
if(cnt==n-1) break;
}
cout<<ans;
return 0;
}

制作不易,不喜勿喷

最新文章

  1. EasyPR--开发详解(7)字符分割
  2. sphinx 配置文件全解析
  3. strcpy 和 strcat
  4. 《你必须知道的.NET》读书笔记:从Hello World认识IL
  5. android Envieroment类
  6. &lt;Interview problem&gt;二进制加法
  7. GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
  8. C#开发微信公众平台-就这么简单(附Demo)(转载)
  9. docker note from UC blog
  10. Android ViewTreeObserver简介
  11. java_jdbc_反射
  12. 获取DOM的真实节点
  13. jQuery动态添加的元素中处理字符串溢出后在指定字符数后添加省略号
  14. 原生拖拽,拖放事件(drag and drop)
  15. 谈谈 css 的各种居中——读编写高质量代码有感
  16. java输出空心菱形
  17. Contains Duplicate leetcode
  18. Jackson将json string转为Object,org.json读取json数组
  19. gif文件解析
  20. Spring Cloud中Feign如何统一设置验证token

热门文章

  1. mysql数据库的连接以及增删改查Java代码实现(转载)
  2. HTTP ERROR400的问题解决
  3. flume将数据写入各个组件
  4. Head First 设计模式 —— 03. 装饰器 (Decorator) 模式
  5. windows7 错误0xc00000ba;无法进入系统;
  6. Java中定时器Timer致命缺点(附学习方法)
  7. uni-app 顶部tabbar切换
  8. UNraid学习随手记:显示主板、CPU传感器温度
  9. Linux LVM Logical Volume Management 逻辑卷的管理
  10. Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)