题目链接: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. CF778A:String Game

    给出字符串s和t,以及s的长度n的一个全排列,求按照这个排列依次删除s的字符,删到何时s中不含子序列t. 解法一: t中的每个字符的位置在s中跳啊跳,合法的情况下t中的字符在s中的位置应该是单调递增的 ...

  2. ListView更新问题

    ListView和Adapter对象均具备有对象更新方法 ListView对象列表的更新方法1.invalidate();--重绘组件2.invlidateView()--重绘组件并包含所有的View ...

  3. linux date 格式化时间和日期

    [root@108test ~]# date -d today +"%Y-%m-%d" 2008-05-07   [root@108test ~]# date -d today + ...

  4. HDU 1024 Max Sum Plus Plus【DP,最大m子段和】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1024 题意: 给定序列,给定m,求m个子段的最大和. 分析: 设dp[i][j]为以第j个元素结尾的 ...

  5. 转 gSOAP中使用TCP协议传输数据

    一  模型 TCP/IP是一个协议族(Internet protocol suite),包含众多的协议,传输控制协议(TCP)和网际协议(IP)分属不同的层次,是保证数据完整传输的两个基本的重要协议. ...

  6. mybatis结合generator进行分页插件PluginAdapter开发

    使用org.mybatis.generator生成UserExample时,无法进行分页,使用下面这个类运行generator便可以生成分页相关的属性了 package org.mybatis.gen ...

  7. java获取本机机器名

    java获取本机机器名 InetAddress.getLocalHost().getHostName().toString();

  8. datasnap使用ipv6

    有些人说DATASNAP不支持IPv6,只支持IPv4. 这是不正确的. DATASNAP默认是使用IPv4在ipv6 环境下 怎样用datasnap?Params.Values['Communica ...

  9. 百度统计的JS脚本原理解析

    一句话:在你的网站上加载百度统计的脚本,这个脚本会收集你的本地信息,然后发送给百度统计网站 https://blog.csdn.net/iqzq123/article/details/8877645 ...

  10. SpringBoot初始教程之日志处理(二)

    SpringBoot初始教程之日志处理(二) 1.介绍 SpringBoot默认是采用logback进行日志处理.Logback是由log4j创始人设计的又一个开源日志组件.Logback是由log4 ...