P4826
2024-09-01 11:12:53
总的来说,
这道题只考查了单纯的建图和最大生成树
但这却是蓝题(问号
题意
题意的理解比较麻烦
简单说就是 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;
}
制作不易,不喜勿喷
最新文章
- EasyPR--开发详解(7)字符分割
- sphinx 配置文件全解析
- strcpy 和 strcat
- 《你必须知道的.NET》读书笔记:从Hello World认识IL
- android Envieroment类
- <;Interview problem>;二进制加法
- GNUPLOT 画多组柱状图 以及 折线图 以及各种问题的解决方案
- C#开发微信公众平台-就这么简单(附Demo)(转载)
- docker note from UC blog
- Android ViewTreeObserver简介
- java_jdbc_反射
- 获取DOM的真实节点
- jQuery动态添加的元素中处理字符串溢出后在指定字符数后添加省略号
- 原生拖拽,拖放事件(drag and drop)
- 谈谈 css 的各种居中——读编写高质量代码有感
- java输出空心菱形
- Contains Duplicate leetcode
- Jackson将json string转为Object,org.json读取json数组
- gif文件解析
- Spring Cloud中Feign如何统一设置验证token
热门文章
- mysql数据库的连接以及增删改查Java代码实现(转载)
- HTTP ERROR400的问题解决
- flume将数据写入各个组件
- Head First 设计模式 —— 03. 装饰器 (Decorator) 模式
- windows7 错误0xc00000ba;无法进入系统;
- Java中定时器Timer致命缺点(附学习方法)
- uni-app 顶部tabbar切换
- UNraid学习随手记:显示主板、CPU传感器温度
- Linux LVM Logical Volume Management 逻辑卷的管理
- Dubbo 就是靠它崭露头角!(身为开源框架很重要的一点)