hdu4786:http://acm.hdu.edu.cn/showproblem.php?pid=4786

题意:给你一个无向图,然后其中有的边是白色的有的边是黑色的。然后问你是否存在一棵生成树,在这课生成树上白色边的数量是一个斐波那契数。

题解:完全没有那样的思想,一道现场水题,就是不会啊,实力太弱 啊。注定打铁啊。这一题是这样的,采用极端思维:就是分别用白色和黑色优先的边去求生成树,得到一个白色数量的区间。这里需要理解的是,白色边的数目,可以在这个区间内变化。也就是构成生成树的白色边的数量在这个区间内,如果这个区间内的数没有一个是斐波那契数,那么就不可能了。同时处理出1e5以内的斐波那契数。

 #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N=2e5+;
int fa[N],f[],vis[N];
int n,m,u,v,w;
struct Node{
int u,v;
int w;
bool operator<(const Node a)const {
return w>a.w;
}
}edge1[N];
struct Node1{
int u,v;
int w;
bool operator<(const Node1 a)const {
return w<a.w;
}
}edge2[N];
void init(){
for(int i=;i<=n;i++)
fa[i]=i;
}
int Find(int x){
int s;
for(s=x;s!=fa[s];s=fa[s]);
while(x!=s){
int temp=fa[x];
fa[x]=s;
x=temp;
}
return s;
}
int solve1(){//黑色优先
int ct=,num=;
for(int i=;i<=m;i++){
int u=Find(edge1[i].u);
int v=Find(edge1[i].v);
if(u!=v){
fa[u]=v;
if(edge1[i].w==)
ct++;
num++;
}
if(num==n-)
return ct;
}
return ;
}
int solve2(){
init();
int ct=,num=;
for(int i=;i<=m;i++){
int u=Find(edge2[i].u);
int v=Find(edge2[i].v);
if(u!=v){
fa[u]=v;
if(edge2[i].w==)
ct++;
num++;
}
if(num==n-)
return ct;
}
return ;
}
int main(){
int T,tt=;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
init();
for(int i=;i<=m;i++){
scanf("%d %d %d",&u,&v,&w);
edge1[i].u=u;edge1[i].v=v;edge1[i].w=w;
edge2[i].u=u;edge2[i].v=v;edge2[i].w=w;
}
sort(edge1+,edge1+m+);
sort(edge2+,edge2+m+);
int ll=solve2();
int rr=solve1();
memset(f,,sizeof(f));
memset(vis,,sizeof(vis));
f[]=;f[]=;
for(int i=;i<=;i++){
f[i]=f[i-]+f[i-];
vis[f[i]]=;
}
bool flag=false;
for(int i=ll;i<=rr;i++)
if(vis[i]){
flag=true;
break;
}
if(flag)printf("Case #%d: Yes\n",tt++);
else
printf("Case #%d: No\n",tt++);
}
}

Fibonacci Tree的更多相关文章

  1. HDU 4786 Fibonacci Tree

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

  2. hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)

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

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

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

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

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

  5. HDU 4786 Fibonacci Tree 最小生成树

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

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

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

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

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

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

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

  9. POJ 4786 Fibonacci Tree

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

  10. 【2013 ICPC亚洲区域赛成都站 F】Fibonacci Tree(最小生成树+思维)

    Problem Description Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do s ...

随机推荐

  1. careercup-栈与队列 3.2

    3.2 请设计一个栈,除pop与push方法,还支持min方法,可返回栈元素中的最小值.push.pop和min三个方法的时间复杂度必须为O(1). 我们假设除了用一个栈s1来保存数据,还用另一个栈s ...

  2. 三分钟学会缓存工具DiskLruCache

    DiskLruCache是一个十分好用的android缓存工具,我们可以从GitHub上下载其源码:https://github.com/JakeWharton/DiskLruCache DiskLr ...

  3. C# DbHelperSQLite,SQLite数据库帮助类 (转载)

    主要功能如下数据访问抽象基础类 主要是访问SQLite数据库主要实现如下功能 .数据访问基础类(基于SQLite),主要是用来访问SQLite数据库的. .得到最大值:是否存在:是否存在(基于SQLi ...

  4. 如何快速的将Centos6.7快速升级3.10.9

    参考文档:http://www.xiexianbin.cn/linux/2015/10/15/quickly-upgrade-centos6.5-kernel-from-2.6.32-to-3.10. ...

  5. 跟着老男孩一步步学习Shell高级编程实战

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://oldboy.blog.51cto.com/2561410/1264627 本sh ...

  6. Oracle 检验身份证是否正确的存储过程

    ) ) ); ); ); ); ); ); ); ; , , , , , , , , , , , , , , , , , ); ;  , ) );  ..  loop )) ) ); , )), ), ...

  7. 应用程序中小红点设置方法 (ios)

    我们的手机上常常会看到软件的右上角出现小红点,上面显示着你未读的消息数.下面是设置小红点的方法. 1.tabBar上按钮的小红点      因为小红点代表你未读的消息数,所以这个小红点上的数据不是凭空 ...

  8. Javascript面试题浅析

    分享几道JavaScript相关的面试题. 字符串反转 这这里提供了两种解题思路.如果各位读者还有其他的思路,可以分享交流! 第一方法: function reverse(str){ var sp = ...

  9. COM简单应用示例

    使用com技术开发模式进行的示例. com技术关键部分源码:主要将所有接口都写入到这个文件中 testinterface.h #ifndef TESTINTERFACE_H #define TESTI ...

  10. nullptr和NULL 区别

    注:本文内容摘自网络,准确性有待验证,现阶段仅供学习参考.尊重作品作者成果,原文链接 :http://www.2cto.com/kf/201302/190008.html 1.为什要有nullptr ...