首页 > 其他分享 >CF1624G MinOr Tree 题解

CF1624G MinOr Tree 题解

时间:2022-10-02 22:24:27浏览次数:85  
标签:int 题解 ll Tree fa CF1624G MinOr

CF1624G MinOr Tree

给定 \(n\) 个点,\(m\) 条边,求在或运算小的最小生成树

考虑二进制拆位,从高位玩往地位贪心,如果答案第 \(i\) 位可以为 \(0\),后 \(i-1\) 取值无论是多少都比第 \(i\) 为 \(1\) 更优。

因此假设当前考虑第 \(k\) 位,则我们需要判断在满足高位的情况下,第 \(k\) 位能否取到 \(0\),则假设已经确定的高位的结果为 \(x\),即应当满足 \(x|w<x+2^{k}\)。

具体见代码

const int N=200005;
int n,m,fa[N];
inline int fidf(int x){return x==fa[x]?x:fa[x]=fidf(fa[x]);}
struct sgline{int u,v;ll w;}line[N];
inline bool check(ll las,ll loc){
	int cnt=0;
	for(int i=1;i<=n;++i)fa[i]=i;
	for(int i=1;i<=m;++i){
		if((line[i].w|las)>=(las+(1ll<<loc)))continue;
		int fu=fidf(line[i].u),fv=fidf(line[i].v);
		if(fu==fv)continue;
		fa[fu]=fv;
		if(++cnt==n-1)break;
	}
	return cnt==n-1;
}
int main(){
	int T=read();
	while(T--){
		n=read(),m=read();
		for(int i=1;i<=m;++i){
			line[i].u=read(),line[i].v=read();
			line[i].w=read();
		}
		ll ans=0;
		for(ll i=30;i>=0;--i){
			if(!check(ans,i))
				ans|=(1ll<<i);
		}
		printf("%lld\n",ans);
	}
	return 0;
}

标签:int,题解,ll,Tree,fa,CF1624G,MinOr
From: https://www.cnblogs.com/BigSmall-En/p/16749619.html

相关文章

  • leetcode -- tree 4
    不同的二叉搜索树II递归#Definitionforabinarytreenode.#classTreeNode:#def__init__(self,val=0,left=None,right=None):#self.val=......
  • luogu P7004 [NEERC2013]Interactive Interception 题解
    题目链接感觉比较玄学的交互,看了题解才会做。主体的思想是,我们在二分位置的同时也对\(v\)的范围进行修改。假设我们现在的区间是\([L,R]\),那么我们取\(mid=\frac{L......
  • BZOJ 2453 维护队列 题解
    带修莫队模板,双倍经验,注意add和del的顺序以及数据范围(洛谷上)。//bzoj#2453.维护队列#pragmaGCCoptimize(2)#include<bits/stdc++.h>usingnamespacestd;cons......
  • CF 617E XOR and Favorite Number 题解
    如果我们对给定的序列求出异或意义下的前缀和,哪么题意变为求满足\(sum_{i-1}\operatorname{xor}sum_j=k\)的\((i,j)\)数量。由于\(x\operatorname{xor}y=z\)等......
  • [ 数据结构 - C++]红黑树RBTree
    在上篇文章我们了解了第一种平衡二叉搜索树AVL树,我们知道AVL树是通过平衡因子来控制左右子树高度差,从而将二叉树变成一颗平衡二叉搜索树。本篇文章我们将要了解另外一种平衡......
  • New Year Tree
    NewYearTreeTranslation给出一棵\(n\)个节点的树,根节点为\(1\)。每个节点上有一种颜色\(c_i\)。\(m\)次操作。操作有两种:1uc:将以\(u\)为根的子树上的所有节点......
  • LeetCode 斐波那契数算法题解 All In One
    LeetCode斐波那契数算法题解AllInOneFibonacciNumber斐波那契数最佳实践性能优化"usestrict";/****@authorxgqfrms*@licenseMIT*@cop......
  • leetcode 538. Convert BST to Greater Tree 把二叉搜索树转换为累加树(简单)
    一、题目大意给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(GreaterSumTree),使每个节点node的新值等于原树中大于或等于node.val的值之和。提......
  • 2022 牛客多校题解
    2022牛客多校题解Contest1JContest2JContest3HHack(SAM)枚举B中的右端点,查询最长在A串中向右可以延伸多长。考虑对A串建立一个SAM,然后对于B串从左到右跑SAM的D......
  • 洛谷 P2709 小B的询问 题解
    莫队板子。//P2709小B的询问#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constintMAXN=50005;structQuery{ intl,r,id;}q[MAXN];in......