题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786

题意:给定图的n个点和m条双向边,告诉你每条边的权值。权值为1表示该边是白边,权值为0表示该边为黑边。

问能否找到一颗生成树,使生成树白边的个数刚好为fibonacci数。如果能构成输出yes,否则输出no。

思路:这里有一个点要知道。因为是0,1 tree。   最小生成树<=生成树的值<=最大生成树。  注意,这个区间的任意一个值都能取到。

   但是如果不是0,1 tree,权值就不是任意可取的了,这个要具体计算的(排列组合,这里先不考虑)。

   剩下的看代码很容易懂。

AC代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define ll long long
const int maxn=1e5+;
const int INF=0x3f3f3f3f; struct Node
{
int u,v,w;
} node[maxn*]; int n,m;
int p[maxn];
int F[]; int cmp1(Node x,Node y)
{
return x.w<y.w;
} int cmp2(Node x,Node y)
{
return x.w>y.w;
} int Find(int x)
{
if(x!=p[x]) p[x]=Find(p[x]);
return p[x];
} void Union(int x,int y)
{
x=Find(x);
y=Find(y);
p[y]=x;
} int kruskal()
{
int q=,ans=;
for(int i=; i<=m; i++)
{
if(Find(node[i].u) != Find(node[i].v))
{
ans+=node[i].w;
Union(node[i].u,node[i].v);
q++;
}
if(q==n-) break;
}
return ans;
} int main()
{
F[]=,F[]=;
int t;
for(t=; F[t]<maxn; t++)
F[t]=F[t-]+F[t-];
int T;
scanf("%d",&T);
for(int tt=; tt<=T; tt++)
{
scanf("%d%d",&n,&m);
for(int i=; i<=m; i++)
scanf("%d%d%d",& node[i].u,& node[i].v,&node[i].w);
int minn,maxx; for(int i=; i<=n; i++) p[i]=i;
sort(node+,node++m,cmp1);
minn=kruskal(); for(int i=; i<=n; i++) p[i]=i;
sort(node+,node++m,cmp2);
maxx=kruskal(); int flag=;
for(int i=; i<t; i++)
if(F[i]>=minn && F[i]<=maxx)
{
flag=;
break;
}
int fa=Find();
for(int i=; i<=n; i++)
if(Find(i)!=fa)
{
flag=;
break;
}
if(flag==) printf("Case #%d: Yes\n",tt);
else printf("Case #%d: No\n",tt);
}
return ;
}

hdu4786 Fibonacci Tree (最小生成树)的更多相关文章

  1. hdu4786 Fibonacci Tree[最小生成树]【结论题】

    一道结论题:如果最小生成树和最大生成树之间存在fib数,成立.不存在或者不连通则不成立.由于是01图,所以这个区间内的任何生成树都存在. 证明:数学归纳?如果一棵树没有办法再用非树边0边替代1边了,那 ...

  2. HDU 4786 Fibonacci Tree 最小生成树

    Fibonacci Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4786 Description Coach Pang is intere ...

  3. 【最小生成树】【kruscal】hdu4786 Fibonacci Tree

    假设这张图能够形成具有k条白边的生成树, 则易证k一定形成一个连续的区间[a,b],中间一定不会断开.要是断开……tm怎么可能. 所以求出a,b就好啦,人家都给你把白边赋成1了,直接跑一下最小生成树, ...

  4. hdoj 4786 Fibonacci Tree【并查集+最小生成树(kruskal算法)】

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  5. Fibonacci Tree(最小生成树,最大生成树)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  6. hdu 4786 Fibonacci Tree(最小生成树)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU 4786 Fibonacci Tree (2013成都1006题)

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  8. POJ 4786 Fibonacci Tree

    Fibonacci Tree Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...

  9. HDU 4786 Fibonacci Tree

    Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) P ...

随机推荐

  1. [NOIP2000] 提高组 洛谷P1018 乘积最大

    题目描述 今年是国际数学联盟确定的“2000――世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  2. SQL SERVER 2012 第五章 创建和修改数据表 の CREATE语句

    CREATE <object type> <object name> CREATE DATABASE <database name> 比较完整的语法列表: 日志文件 ...

  3. oracle alert 日志位置

    Oracle 11g Alert log 文件位置的问题 https://blog.csdn.net/yujin2010good/article/details/7690191 https://blo ...

  4. mySQL windows 服务

    https://www.jizhuba.com/kejiyouxi/20171001/6006.html

  5. Tomcat错误信息(服务器版本号)泄露(低危)

    一.问题描述Tomcat报错页面泄漏Apache Tomcat/7.0.52相关版本号信息,是攻击者攻击的途径之一.因此实际当中建议去掉版本号信息. 二.解决办法 1.进入到tomcat/lib目录下 ...

  6. SQL Server Fundamentals

    http://www.cnblogs.com/CreateMyself/category/810461.html

  7. 如何在不允许联网的环境下使用Maven开发

    前言:Maven的运行机理是:Maven核心组件先去本地的.m2目录下的库中去寻找依赖或者插件,如果本地库里没有,如果配置了私服则上私服去下载依赖或者插件,如果私服上没有,则上中央服务等Maven服务 ...

  8. 学习swift从青铜到王者之swift闭包06

    语法表达式 一般形式:{ (parameters) -> returnType in statements } 这里的参数(parameters),可以是in-out(输入输出参数),但不能设定 ...

  9. ScrollView阻尼效果

    activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...

  10. IntelliJ IDEA 使用maven 集成SpringMVC+Hibernate

    准备工作: 安装idea intellij 安装jdk1.8,配好环境变量 安装tomcat 7 准备工作完成之后,就开始创建项目了 创建项目 1.File–>new project–>选 ...