题意:

给定一个无向图

n 个点 m条无向边

u v val

val == 1 表示边(u, v) 为白边

问能否找到n个点的生成树, 使得白边数为斐波那契数

思路:

并查集求图是否连通( 是否存在生成树)

求出 最多白边树 的 白边数量

求出 最少白边树 的 白边数量

若[最少, 最多] 区间内存在斐波那契数 ,则满足条件

(也就是说,白边的数量是连续有解的)

//YY得证

#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string>
#include<queue>
#include<string.h>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<math.h>
#include<algorithm>
#define N 101010
#define inf 10000000
using namespace std;
inline int Min(int a,int b){return a>b?b:a;}
inline int Max(int a,int b){return a<b?b:a;} int f[N];
int find(int x){return x==f[x]?x:(f[x] = find(f[x]));}
void Union(int u, int v){
int fu = find(u), fv = find(v);
if(fu>fv)
f[fu] = fv;
else
f[fv] = fu;
}
set<int>fib;
int n, m;
struct node{
int u,v,c;
}edge[N];
int edgenum;
bool cmp1(node a,node b){return a.c<b.c;}
bool cmp2(node a,node b){return a.c>b.c;}
int main(){
int T, Cas = 1;scanf("%d",&T);
int i, j, col;
fib.clear();
fib.insert(1);
fib.insert(2);
j=1;
for(i=2;i<=N;){
fib.insert(i+j);
int lala = i;
i = i+j;
j = lala;
}
while(T--){
scanf("%d %d", &n, &m);
for(i=1;i<=n;i++)f[i] = i;
edgenum = 0;
while(m--){
int u,v;
scanf("%d %d %d",&u,&v,&col);
edge[edgenum].u = u;
edge[edgenum].v = v;
edge[edgenum++].c = col; int fx = find(u), fy = find(v);
if(fx == fy)continue;
Union(fx,fy); }
printf("Case #%d: ",Cas++);
for(i=1;i<=n;i++)find(i);
bool su = true;
for(i=1;i<=n;i++)
if(f[i]!=f[1])
{su = false; break;} if(su == false)
{printf("No\n");continue;}
for(i=1;i<=n;i++)f[i] = i;
sort(edge, edge+edgenum, cmp1);
int size = 0, bl=0, bm=0;
for(i=0;i<edgenum;i++)
{
int u =edge[i].u, v=edge[i].v;
int fu = find(u), fv=find(v);
if(fu == fv)continue;
size++;
bl+= edge[i].c;
Union(fu, fv);
if(size==n-1)break;
}
for(i=1;i<=n;i++)f[i] = i;
sort(edge, edge+edgenum, cmp2);
size = 0;
for(i=0;i<edgenum;i++)
{
int u =edge[i].u, v=edge[i].v;
int fu = find(u), fv=find(v);
if(fu == fv)continue;
size++;
bm+= edge[i].c;
Union(fu, fv);
if(size==n-1)break;
} if(fib.upper_bound(bl) == fib.end() ){printf("No\n");continue;}
if((*fib.lower_bound(bl) )>bm){printf("No\n");continue;} printf("Yes\n");
}
return 0;
}
/*
4 2
1 2 1
3 4 1 */

HDU 4786 生成树 并查集+极大极小值 黑白边 确定选择白边的数量的更多相关文章

  1. HDU 2818 (矢量并查集)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2818 题目大意:每次指定一块砖头,移动砖头所在堆到另一堆.查询指定砖头下面有几块砖头. 解题思路: ...

  2. hdu 1116 欧拉回路+并查集

    http://acm.hdu.edu.cn/showproblem.php?pid=1116 给你一些英文单词,判断所有单词能不能连成一串,类似成语接龙的意思.但是如果有多个重复的单词时,也必须满足这 ...

  3. Bipartite Graph hdu 5313 bitset 并查集 二分图

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5313 题意: 给出n个顶点,m条边,问最多添加多少条边使之构成一个完全二分图 存储结构: bitset   ...

  4. hdu 3081(二分+并查集+最大流||二分图匹配)

    Marriage Match II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  5. 2015 ACM/ICPC Asia Regional Changchun Online HDU - 5441 (离线+并查集)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5441 题意:给你n,m,k,代表n个城市,m条边,k次查询,每次查询输入一个x,然后让你一个城市对(u,v ...

  6. hdu 3536【并查集】

    hdu 3536 题意: 有N个珠子,第i个珠子初始放在第i个城市.有两种操作: T A B:把A珠子所在城市的所有珠子放到B城市.  Q A:输出A珠子所在城市编号,该城市有多少个珠子,该珠子转移了 ...

  7. HDU 1829 分组并查集

    题意:有两种性别,每组数据表示是男女朋友,判断输入的几组数据是否有同性恋 思路:http://blog.csdn.net/iaccepted/article/details/24304087 分组并查 ...

  8. HDU 1198(并查集)

    题意:给你11个图,每一个都有管道,然后给一张由这11个正方形中的n个组成的图,判断有几条连通的管道: 思路:在大一暑假的时候做过这道题,当时是当暴力来做的,正解是并查集,需要进行一下转换: 转换1: ...

  9. HDU 4496 D-City(并查集,逆思维)

    题目 熟能生巧...常做这类题,就不会忘记他的思路了... //可以反过来用并查集,还是逐个加边,但是反过来输出...我是白痴.....又没想到 //G++能过,C++却wa,这个也好奇怪呀... # ...

随机推荐

  1. MSSQL随机数概率测试

    随机概率测试 创建一个表统计create table t_test(ip char(15)) --truncate table t_test; declare @i int ;set @i=0; -- ...

  2. Android 开发笔记“调用.net webservice遇到的问题”

    1.An exception occurred: org.ksoap2.SoapFault SoapFault - faultcode: 'soap:Server' faultstring: '服务器 ...

  3. 高性能javascript 学习笔记(1)

    加载和运行 管理浏览器中的javascript代码是个棘手的问题,因为代码运行阻塞了其他浏览器处理过程,诸如用户绘制,每次遇到<script>标签,页面必须停下来等待代码下载(如果是外部的 ...

  4. 怪兽z主机 驱动集

    这里给买家朋友送上我们主机的驱动包. 1.主板驱动.  访问密码 f334 http://yunpan.cn/QNTGxehcnLBW5 2.AMD显卡催化剂 amd catalyst(没装的话,无法 ...

  5. COB封装的优势

    随着固态照明技术的不断进步,COB(chip-on-board)封装技术得到越来越多的重视,由于COB光源有热阻低,光通量密度高,眩光少,发光均匀等特性,在室内外照明灯具中得到了广泛的应用,如筒灯,球 ...

  6. JAVA GUI学习 - JTable表格组件学习_C ***

    /** * JTable高级应用 * @author Wfei * */ public class JTableKnow_C extends JFrame { JTable jTable; MyJMe ...

  7. ios7以上自定义导航栏标题的字体大小及颜色的方法

    自定义导航栏的字体和颜色,只需要自定义一个lable,然后将lable添加到导航栏的titleview中就可以了 代码如下 UILabel *label = [[UILabel alloc] init ...

  8. spring和mybatis整合进行事务管理

    1.声明式实现事务管理 XML命名空间定义,定义用于事务支持的tx命名空间和AOP支持的aop命名空间: <beans xmlns="http://www.springframewor ...

  9. Objects

    Obeject Object Object representation and value representation Subobjects Polyomrphic objecets Alignm ...

  10. [置顶] P2P之我见,关于打洞的学问-------开篇

    最近忙项目,有点累,无暇顾急博客,4月份本来想写写流媒体的文章,结果回家休了两个月回深圳后,接了P2P的项目,那就开始P2P吧. P2P起源于美国大学生Shawn Fanning 写的一个分享软件Na ...