P4826
总的来说,
这道题只考查了单纯的建图和最大生成树
但这却是蓝题(问号
题意
题意的理解比较麻烦
简单说就是 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的更多相关文章
- kruskal 及其应用
kruskal 最小生成树 kruskal 是一种常见且好理解的最小生成树(MST)算法. 前置知识 并查集和路径压缩 生成树 在有 n 的顶点的无向图中,取其中 n-1 条边相连,所得到的树即为生成 ...
随机推荐
- JavaDailyReports10_16
今天学习安装配置了JavaWeb的资源环境, 明天开始学习HTML!
- OneBlog开源博客-详细介绍如何实现freemarker自定义标签
前言 OneBlog中使用到了springboot + freemarker的技术,同时项目里多个controller中都需要查询一个公有的数据集合,一般做法是直接在每个controller的方法中通 ...
- 整合.NET WebAPI和 Vuejs——在.NET单体应用中使用 Vuejs 和 ElementUI
.NET简介 .NET 是一种用于构建多种应用的免费开源开发平台,例如: Web 应用.Web API 和微服务 云中的无服务器函数 云原生应用 移动应用 桌面应用 1). Windows WPF 2 ...
- 6.裸机C语言控制LED
C语言版LED灯 汇编完成C语言的环境配置 C语言完成点亮LED灯 程序编写 汇编程序start.S .global _start /* 全局标号 */ /* * 描述: _start函数,程序从此函 ...
- 1001 害死人不偿命的(3n+1)猜想 (15分)
卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复砍下去,最后一定在某一步得到 n=1.卡拉兹在 1950 ...
- ES6+Webpack+Babel基本环境搭建
### 本文基本是流水文,记录学习中步骤,希望对看到的你有用,蟹蟹. 基本环境搭建 技术栈 Webpack ES6 Babel 开发环境 VS Code Node 搭建环境过程 新建项目文件夹
- Databricks 第5篇:Databricks文件系统(DBFS)
Databricks 文件系统 (DBFS,Databricks File System) 是一个装载到 Azure Databricks 工作区的分布式文件系统,可以在 Azure Databric ...
- nginx 重写去掉index.php
if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?s=$1 last; }
- Centos镜像国内最全下载地址
CentOS 官方下载地址:https://www.centos.org/download/Centos国内下载源http://man.linuxde.net/download/CentOShttp: ...
- win安装python模块出现依赖问题的解决方法 & No module named 'MySqldb'
前言 一年多了,还在写这种问题,羞愧. 新公司不让用自己的电脑,配的winPC,项目启不起来,之前也出现过这个问题,是py3缺少某个模块,但是自己没记,这次记一下好了. No module named ...