hdu 5627 按位于最大生成树
来源:互联网 发布:linux echo 不换行 编辑:程序博客网 时间:2024/05/23 16:53
我们贪心的从大到小枚举每一个位,如果一个位能取当且仅当所有权值这个位不为0的边能形成一棵生成树。
是否能形成生成树我们套用kruskal算法中用到的并差集可以高效实现。
#include<iostream>#include<cstdio>#include<cstdlib>#include<vector>#include<cmath>#include<string>#include<algorithm>#include<set>#include<map>#include<cstring>#include<queue>#include<stack>#include<list>using namespace std;typedef long long ll;const int MAXN=300000+5;int x[MAXN],y[MAXN],w[MAXN];int fa[MAXN];int getfa(int x){ return (!fa[x])?x: (fa[x]=getfa(fa[x]) );}int main(){int T;scanf("%d",&T);while(T--){ int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&x[i],&y[i],&w[i]); } int ans=0; for(int i=30;i>=0;i--){ ans+=(1<<i); for(int j=0;j<=n;j++){ fa[j]=0; } int cnt=0; for(int j=1;j<=m;j++){ if( (w[j]&ans)==ans ){ int fx=getfa( x[j] ); int fy=getfa( y[j] ); if( fx==fy )continue; fa[ fx ]=fy; cnt++; } } if(cnt!=n-1)ans-=(1 << i); } printf("%d\n",ans);}return 0;}
0 0
- hdu 5627 按位于最大生成树
- hdu 4133 最大生成树
- HDU 3367 最大生成树
- HDU-3367最大生成树
- hdu 5627 Clarke and MST【最大生成树】
- hdu 3367 Pseudoforest(最大生成树)
- hdu 4313 Matrix(最大生成树)
- HDU 3367 Pseudoforest 最大生成树
- hdu 3367 Pseudoforest 最大生成树
- hdu 4786 最小生成树与最大生成树
- HDU 5627 Clarke and MST 求&的最大生成树 贪心
- 【HDU】4984 Goffi and Graph 最大生成树
- HDU-#4786 Fibonacci Tree(最大最小生成树)
- HDU 4424 Conquer a New Region 最大生成树
- HDU 4424 - Conquer a New Region(最大生成树)
- HDU 3367 Pseudoforest(最大生成树+并查集)
- [LCT 动态最大生成树] HDU 5398 GCD Tree
- HDU 2377 Bad Cowtractors(最大生成树-Kruskal)
- 百万数据查询优化技巧三十则
- [菜鸟笔记]FORALL 实践问题
- Eclipse和PyDev搭建完美Python开发环境(Windows篇)
- Java垃圾回收机制
- Unity中预览lua脚本
- hdu 5627 按位于最大生成树
- LTE覆盖半径
- Daemon 线程
- javascript正则表达式---(String)提供的正则表达式方法
- LeetCode 268. Missing Number 解题报告
- ConcurrentLinkedQueue
- Codeforces Round #257 (Div. 2) A. Jzzhu and Children
- 近期博客计划清单
- 如何第一次办理港澳通行证、护照、台湾通行证