/*
题意 :有一些边权值为1和0,判断是否存在一个生成树使得他的总权值为一个斐波那契数。
解法:建立一个最小生成树向里面加权值为1的边替换为0的边,保证原来的联通。因为权值为1,可直接求出最大生成树和最小生成树。
判断他们中间是否有斐波那契数即可,当然要先判断是否可以构成一个生成树。
这个我刚开始忘判断了。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 110000
struct node
{
int u,v,w;
} bian[N];
int f[N*2],flag[N*2],pre[N];
int cmp(const void *a,const void *b)
{
return (*(struct node *)a).w-(*(struct node *)b).w;
}
int find(int x)
{
if(x!=pre[x])
pre[x]=find(pre[x]);
return pre[x];
}
int cmpp(const void *a,const void *b)
{
return (*(struct node *)b).w-(*(struct node *)a).w;
}
int main()
{
int t,m,n,i,j=0,k,suma,sumb,d;
memset(flag,0,sizeof(flag));
f[0]=1;
f[1]=1;
flag[1]=1;
for(i=2; i<=25; i++)
{
f[i]=f[i-1]+f[i-2];
flag[f[i]]=1;
// printf("%d ",f[i]);
}
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=0; i<m; i++)
scanf("%d%d%d",&bian[i].u,&bian[i].v,&bian[i].w);
qsort(bian,m,sizeof(bian[0]),cmp);
for(i=1; i<=n; i++)
pre[i]=i;
k=0;
suma=0;
for(i=0; i<m&&k<n-1; i++)
{
int u=find(bian[i].u);
int v=find(bian[i].v);
if(u!=v)
{
pre[u]=v;
k++;
suma+=bian[i].w;
}
}
if(i==m&&k!=n-1) {//注意判断无法生成最小生成树的条件
printf("Case #%d: No\n",++j);
continue;
}
for(i=1; i<=n; i++)
pre[i]=i;
qsort(bian,m,sizeof(bian[0]),cmpp);
k=0;
sumb=0;
for(i=0; i<m&&k<n-1; i++)
{
int u=find(bian[i].u);
int v=find(bian[i].v);
if(u!=v)
{
pre[u]=v;
k++;
sumb+=bian[i].w;
}
}
d=0;
for(i=suma; i<=sumb; i++)
if(flag[i]){
d=1;
break;
}
if(d)
printf("Case #%d: Yes\n",++j);
else
printf("Case #%d: No\n",++j);
}
return 0;
}

hdu 4786 最小生成树与最大生成树的更多相关文章

  1. HDU 4786 最小生成树变形 kruscal(13成都区域赛F)

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

  2. 【HDU 4786 Fibonacci Tree】最小生成树

    一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...

  3. hdu 4786 Fibonacci Tree (最小、最大生成树)

    题意: N个点,M条边.每条边连接两个点u,v,且有一个权值c,c非零即一. 问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数. (fibonacii数=1,2,3,5,8 ...

  4. HDU - 4786 Fibonacci Tree (MST)

    题意:给一张由白边和黑边构成的无向图,求是否存在一个生成树,使白边的数量为一个斐波那契数. 分析:白边权值为1,黑边权值为0.求出该图的最小生成树和最大生成树,若这两个值之间存在斐波那契数,则可以,若 ...

  5. HDU 1233(最小生成树)

    HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...

  6. HDU 4786 Fibonacci Tree 最小生成树

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

  7. HDU 4786 Fibonacci Tree(生成树,YY乱搞)

    http://acm.hdu.edu.cn/showproblem.php? pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others ...

  8. HDU 4786(最小生成树 kruskal)

    题目链接:pid=4786" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4786 Prob ...

  9. HDU 4786 Fibonacci Tree 生成树

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:有N个节点(1 <= N <= 10^5),M条边(0 <= M <= ...

随机推荐

  1. POJ 3268 最短路应用

    POJ3268 题意很简单 正向图跑一遍SPFA 反向图再跑一边SPFA 找最大值即可. #include<iostream> #include<cstdio> #includ ...

  2. JSP-Runoob:JSP 发送邮件

    ylbtech-JSP-Runoob:JSP 发送邮件 1.返回顶部 1. JSP 发送邮件 虽然使用JSP实现邮件发送功能很简单,但是需要有JavaMail API,并且需要安装JavaBean A ...

  3. bzoj1477 && exgcd学习笔记

    exgcd 由于忘记了exgcd,这道题就没做出来... exgcd的用处是求ax+by=gcd(a,b)这样方程的解 大概是这个样子的 void ext_gcd(long long a, long ...

  4. PCB NOSQL MongoDb MI流程指示数据存储结构

    一.MI流程指示结构 二.产品型号树结构(即盲埋孔板型号结构) 三.MI流程指示UI 小结:1.MI流程指示使用的表非常之多(30多张表),存储的数据分散到各个表中,而NOSQL 一个产品型号一条记录 ...

  5. [Swift通天遁地]九、拔剑吧-(11)创建强大的Pinterest风格的瀑布流界面

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  6. akka设计模式系列-Aggregate模式

    所谓的Aggregate模式,其实就是聚合模式,跟masterWorker模式有点类似,但其出发点不同.masterWorker模式是指master向worker发送命令,worker完成某种业务逻辑 ...

  7. Vue导航守卫beforeRouteEnter,beforeRouteUpdate,beforeRouteLeave详解

    Vue导航守卫以我自己的理解就是监听页面进入,修改,和离开的功能.每个守卫接受三个参数 to: Route: 即将要进入的目标路由对象 from: Route: 当前导航正要离开的路由 next: F ...

  8. .net 必看书籍1

    我们2个网站运营群,有很多技术高手,同时也有大部分技术新人,如何从传统asp转到.net,从传统table转到div+css布局,从传统技术转到ajax,从小型程序转到高性能并发的大型程序,我花了2小 ...

  9. c++ 四种类型转换机制

    类型转换机制可以分为:隐式类型转换 和 显示类型转换(强制类型转换) C中的类型转换: 事情要从头说起,这个头就是C语言.我们已经习惯了使用C-like类型转换,因为它强大而且简单. 主要有一下两种形 ...

  10. [转]Linux下paste命令详解

    转自:http://blog.csdn.net/andy572633/article/details/7214126 paste单词意思是粘贴.该命令主要用来将多个文件的内容合并,与cut命令完成的功 ...