hdu 5627 Clarke and MST(最大 生成树)
4 5
1 2 5
1 3 3
1 4 2
2 3 1
3 4 7
首先贴上自己的写法,虽然不是很正宗的做法
- #pragma comment(linker, "/STACK:1024000000,1024000000")
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cmath>
- #include<math.h>
- #include<algorithm>
- #include<queue>
- #include<set>
- #include<bitset>
- #include<map>
- #include<vector>
- #include<stdlib.h>
- #include <stack>
- using namespace std;
- #define PI acos(-1.0)
- #define max(a,b) (a) > (b) ? (a) : (b)
- #define min(a,b) (a) < (b) ? (a) : (b)
- #define ll long long
- #define eps 1e-10
- #define MOD 1000000007
- #define N 300006
- #define M 300006
- #define inf 1e12
- struct Node{
- int x,y;
- int cost;
- }edge[M];
- int n,m;
- int fa[N];
- void init(){
- for(int i=;i<N;i++){
- fa[i]=i;
- }
- }
- int find(int x){
- return fa[x]==x?x:fa[x]=find(fa[x]);
- }
- bool cmp(Node a,Node b){
- return a.cost>b.cost;
- }
- int main()
- {
- int t;
- scanf("%d",&t);
- while(t--){
- scanf("%d%d",&n,&m);
- init();
- for(int i=;i<m;i++){
- int a,b,c;
- scanf("%d%d%d",&edge[i].x,&edge[i].y,&edge[i].cost);
- }
- sort(edge,edge+m,cmp);
- int flag=;
- int ans;
- int num=n-;
- for(int i=;i<m;i++){
- int root1=find(edge[i].x);
- int root2=find(edge[i].y);
- if(root1!=root2){
- if(flag){
- ans=edge[i].cost;
- flag=;
- }else{
- ans&=edge[i].cost;
- }
- fa[root1]=root2;
- num--;
- }
- }
- if(num!=){
- printf("0\n");
- }
- else{
- printf("%d\n",ans);
- }
- }
- return ;
- }
官方题解:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- const int N = + ;
- struct Edge{
- int from,to,dis;
- }a[N],b[N];
- int fa[N];
- int find(int x){
- if(x==fa[x]) return x;
- return fa[x] = find(fa[x]);
- }
- int tmp;
- bool solve(int pos, Edge *a, int n, int m){
- for(int i=;i<=n;++i)
- fa[i] = i;
- int cnt = ;
- tmp = ;
- for(int i=;i<=m;++i){
- if(((a[i].dis>>pos)&)==)
- continue;
- int fu = find(a[i].from);
- int fv = find(a[i].to);
- if(fu!=fv){
- if(cnt==)
- tmp = a[i].dis;
- else
- tmp &= a[i].dis;
- fa[fu] = fv;
- cnt++;
- if(cnt==n-)
- return true;
- }
- }
- return false;
- }
- int main() {
- int t,n,m;
- scanf("%d",&t);
- while(t--){
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;++i){
- scanf("%d%d%d",&a[i].from,&a[i].to,&a[i].dis);
- }
- int ans = ;
- for(int i=;i>=;--i){
- if(solve(i,a,n,m)){
- ans = tmp;
- int mm = ;
- for(int i=;i<=m;++i){
- if((a[i].dis>>i)&)
- b[++mm] = a[i];
- }
- m = mm;
- for(int i=;i<=m;++i)
- a[i] = b[i];
- }
- }
- cout<<ans<<endl;
- }
- return ;
- }
hdu 5627 Clarke and MST(最大 生成树)的更多相关文章
- HDU 5627 Clarke and MST &意义下最大生成树 贪心
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5627 题意:Bestcoder的一道题,让你求&意义下的最大生成树. 解法: 贪心,我们从高位 ...
- HDU 5628 Clarke and math——卷积,dp,组合
HDU 5628 Clarke and math 本文属于一个总结了一堆做法的玩意...... 题目 简单的一个式子:给定$n,k,f(i)$,求 然后数据范围不重要,重要的是如何优化这个做法. 这个 ...
- hdu 3367(Pseudoforest ) (最大生成树)
Pseudoforest Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tot ...
- HDU 5629 Clarke and tree dp+prufer序列
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=562 题意: 求给每个节点的度数允许的最大值,让你求k个节点能组成的不同的生成树个数. 题解: 对于n ...
- hdu 5565 Clarke and baton 二分
Clarke and baton Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 5563 Clarke and five-pointed star 水题
Clarke and five-pointed star Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/show ...
- hdu 5465 Clarke and puzzle 二维线段树
Clarke and puzzle Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php? ...
- hdu 5464 Clarke and problem dp
Clarke and problem Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php ...
- HDU 5628 Clarke and math dp+数学
Clarke and math 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5628 Description Clarke is a patient ...
随机推荐
- Linux内存点滴 用户进程内存空间
Linux内存点滴 用户进程内存空间 经常使用top命令了解进程信息,其中包括内存方面的信息.命令top帮助文档是这么解释各个字段的. VIRT, Virtual Image (kb) RES, Re ...
- <% %> 、 <%= %> 、<%# %> 的区别
1,<% %>用来绑定后台代码 中间一般放函数或者方法,典型的asp程序写法. 在前台页面可以写后台代码 相当于开辟了C#空间,可以写C#代码 2,& ...
- textChanged(*)重点
# -*- coding: cp936 -*- import sys from PyQt4 import QtCore, QtGui class MyDialog(QtGui.QDialog): de ...
- 判断一个int 型整数 是否为回文数
leetcode 上的题目 Determine whether an integer is a palindrome. Do this without extra space. 由于不能使用额外空间, ...
- SPRING源码分析:IOC容器
在Spring中,最基本的IOC容器接口是BeanFactory - 这个接口为具体的IOC容器的实现作了最基本的功能规定 - 不管怎么着,作为IOC容器,这些接口你必须要满足应用程序的最基本要求: ...
- SpringMVC的@ResponseBody返回JSON,中文乱码问题的解决.
SpringMVC的@ResponseBody,返回json,如果有中文显示乱码的解决办法. 在SpringMVC的配置文件中 <bean class="org.springframe ...
- [跟我学spring学习笔记][更多DI知识]
延迟初始化Bean 定义: 延迟初始化也叫做惰性初始化,指不提前初始化Bean,在真正使用时才创建并初始化Bean 如何延迟: 配置方式很简单只需在标签上指定 “lazy-init” 属性值为“tru ...
- 虚拟化之docker安装篇
1,docker pull centos 下载centos镜像 docker search centos 搜索镜像 2,docker images 查看本地镜像 3,do ...
- 关于document.write()重写页面
今天碰到了一个以前没注意的问题即:document.write(),在此拿来分享! document.write是最基本的JavaScript命令之一,这个命令简单地打印指定的文本内容到页面上(注意是 ...
- 0112.1——iOS开发之理解iOS中的MVC设计模式
模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...