最小生成树
来源:互联网 发布:双串联谐振双向三端口 编辑:程序博客网 时间:2024/04/30 20:35
链接:http://exam.upc.edu.cn/problem.php?id=2399
bzoj 3943
题意:n个队伍进行比赛,任意两个队比赛得分为这两个队的价值的异或。每次两支队伍进行比赛,都会淘汰一支队伍,求最大的异或和。
解析:n个队伍,n - 1次比赛。满足这个条件,又是求最大值,就是
#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <queue>using namespace std;struct T{ int u,v; long long w; bool operator < (const T a) const { return w > a.w; }} a[4000010];int b[2005];int p[2005];int n,m;int findx(int x){ return p[x] == x ? x : p[x] = findx(p[x]);}long long Kruskal(){ long long ans = 0; for(int i = 0; i < n; i ++) p[i] = i; sort(a,a + m); for(int i = 0; i < m; i ++) { int x = findx(a[i].u); int y = findx(a[i].v); if(x != y) { ans += a[i].w; p[x] = y; } } return ans;}int main(){ //freopen("in.txt","r",stdin); scanf("%d",&n); for(int i = 0; i < n; i ++) { scanf("%d",&b[i]); } for(int i = 0; i < n; i ++) { for(int j = 0; j < i; j ++) { a[m].u = i; a[m].v = j; a[m ++].w = b[i] ^ b[j]; } } printf("%lld\n",Kruskal()); return 0;}
最大生成树。注意异或和是long long
代码:
0 0
- 最小比例 最小生成树
- 最小生成树&&次最小生成树
- 最小生成生成树计数
- 树+最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树Kruskal
- kruskal 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树 MST
- 最小生成树问题
- 最小生成树
- 最小生成树
- 最小生成树
- 最小生成树
- 淘忆项目之服务器端的初始化
- 初学React,setState后获取到的thisstate没变,还是初始state?
- DNS协议笔记
- Jquery根据name和value属性循环选中radio
- HTML5多媒体播放video元素
- 最小生成树
- c++泛型编程中的traits技术
- 2016-8-22:html一些的标准
- FastDFS集群服务器搭建
- 【C#】VS根据系统自动更改引用64和32位的动态库
- Linux网络编程入门 (转载)
- getJSONObject与optJSONObject的区别
- U-Boot代码中常见汇编指令
- 前端国际化插件