#454. Minimum Or Spanning Tree

#454. Minimum Or Spanning Tree

题目描述

给出n个点, m条边的无向图, 每条边连接u,v两个端点,边权为w, 求图的生成树的最小代价。

在这道题中, 我们定义一棵生成树的代价为他所有边的边权按位或得到的值。

输入格式

第一行两个数字 nm,n 表示点数,m表示图的边数。

接下来 m 行 , 每行三个整数 u,v,w,表示点 u 和点v 之间存在一条边权为 w 的边。

输出格式

一行, 描述生成树的最小代价。

样例输入

5 7 4 2 7 2 5 8 3 4 2 3 2 1 2 4 2 4 1 2 1 2 2

样例输出

10

数据规模

所有数据保证 1u,vn2105,n1m4105,1w109且至少存在一棵生成树。

题目分析

先假设ans为最大值,按位枚举看看当前位是否能为0,把为0的放在一起,通过并查集检测是否构成联通图。

#include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 2e5+7; struct Edge { ll s,f; ll val; }; inline int read(){ int This=0,F=1; char ch=getchar(); while(ch<'0'||ch>'9'){ if(ch=='-') F=-1; ch=getchar(); } while(ch>='0'&&ch<='9'){ This=(This<<1)+(This<<3)+ch-'0'; ch=getchar(); } return This*F; } int fa[N]; inline int find(int x) { if(x==fa[x]) return x; fa[x] = find(fa[x]); return fa[x]; } inline void unoin(Edge x) { ll x_fa = find(x.s); ll y_fa = find(x.f); fa[x_fa] = y_fa; } inline bool check(int n) { int t = find(1); for(int i = 1 ; i <= n ; i++) if(find(i)!=t) return 0; return 1; } int main() { // freopen("input.txt","r",stdin); // freopen("output.txt","w",stdout); int n,m; scanf("%d%d",&n,&m); vector<Edge>e; for(int i = 1 ; i <= m ; i++) { ll s = read(),f= read(),val= read(); e.push_back({s,f,val}); } ll ans = (1ll<<32)-1; for(int i = 31 ; i>=0 ; i--) { ans -= (1ll<<i); vector<Edge>te; memset(fa,0,sizeof(fa)); for(int i = 1 ; i <= n ; i++) fa[i] = i; for(int j = 0 ; j < e.size() ; j++) { if((e[j].val | ans) <= ans) { //希望筛出该位为0 te.push_back(e[j]); unoin(e[j]); } } if(check(n)) e = te; else ans += (1ll<<i); } printf("%lld",ans); return 0; }

__EOF__

本文作者seekerzhz
本文链接https://www.cnblogs.com/zhaohanzheng/p/16100842.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   seekerHeron  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示