总的来说,

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

但这却是蓝题(问号


题意

题意的理解比较麻烦

简单说就是 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;
}

制作不易,不喜勿喷

P4826的更多相关文章

  1. kruskal 及其应用

    kruskal 最小生成树 kruskal 是一种常见且好理解的最小生成树(MST)算法. 前置知识 并查集和路径压缩 生成树 在有 n 的顶点的无向图中,取其中 n-1 条边相连,所得到的树即为生成 ...

随机推荐

  1. JavaScript内置可用类型

    string,number,boolean,null和undefined,object,symbol(ES6新语法)

  2. Spring Boot Starters

    Spring Boot Starters 摘自 https://www.nosuchfield.com/2017/10/15/Spring-Boot-Starters/ 2017-10-15 Spri ...

  3. LVS之2---基于LVS负载均衡集群架构

    LVS之2---基于LVS负载均衡集群架构实现 目录 LVS之2---基于LVS负载均衡集群架构实现 ipvsadm software package Options 常用命令 保存及重载规则 内存映 ...

  4. Servlet3.0提供的@WebServlet注解引用参数详情介绍

    Servlet3.0提供的@WebServlet注解: servlet3.0所提供的@webservlet注解,用来将某个类注解为一个servlet类,简化了web.xml上的servlet配置, @ ...

  5. ECMAScript概述及浅谈const,let与块级作用域

    ECMAScript可以看作javascript的标准规范,实际上javascript是ECMAScript的一门脚本语言,ECMAScript只提供了最基本的语言JavaScript对ECMAScr ...

  6. MP(MyBatis-Plus)的自动填充功能

    什么是自动填充 有些表中会有更新时间.创建时间.更新人或者创建人这些字段. 每次对数据进行新增.删除.修改时都需要对这些字段进行设置.传统的做法是在进行这些操作前,对Entity的字段进行set设置, ...

  7. Thread线程控制之sleep、join、setDaemon方法的用处

    Thread线程控制之sleep.join.setDaemon方法的用处 1. sleep方法 public static void sleep(long millis) throws Interru ...

  8. ATM_tests

    ATM取款机练习程序 一.程序分析 自顶向下.逐步细化 按照程序执行的流程,将程序分解为若干个功能相对独立的函数(方法),每个函数(方法)负责某一功能,然后根据程序执行的流程,将函数(方法)组装(调用 ...

  9. Java实现RS485串口通信

    前言 前段时间赶项目的过程中,遇到一个调用RS485串口通信的需求,赶完项目因为楼主处理私事,没来得及完成文章的更新,现在终于可以整理一下当时的demo,记录下来. 首先说一下大概需求:这个项目是机器 ...

  10. Docker安装MySQL,Redis,阿里云镜像加速

    Docker安装 虚拟化容器技术.Docker基于镜像,可以秒级启动各种容器.每一种容器都是一个完整的环境,容器之间相互隔离. 如果之前安装的有其他版本,卸载旧的版本. $ sudo yum remo ...