hdu 5627 按位于最大生成树
2016-02-17 19:13
295 查看
我们贪心的从大到小枚举每一个位,如果一个位能取当且仅当所有权值这个位不为0的边能形成一棵生成树。
是否能形成生成树我们套用kruskal算法中用到的并差集可以高效实现。
是否能形成生成树我们套用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; }
相关文章推荐
- iOS Size Class学习备忘
- 区间调度问题 ----- 贪心算法
- 广告标识符IDFA
- EventBus使用详解(一)——初步使用EventBus
- linux 命令
- Codeforces Round #257 (Div. 2) A. Jzzhu and Children
- MYSQL集群
- LeetCode 268. Missing Number 解题报告
- linux进程间通讯-System V IPC 信号量
- 自己动手实现一个队列LGQueue
- 系统提供的dispatch方法
- 最简单的Mac xcode下搭建lua
- 五个案例让你明白GCD死锁
- 基于lua+nginx的abtest系统
- Linux文件描述符与打开文件之间的区别(转载)
- ConcurrentLinkedQueue
- 嵌入式公司 专注十二年培训
- iOS开发中的gcd多线程tips
- LTE覆盖半径
- Daemon 线程