Fibonacci Tree

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 2952    Accepted Submission(s): 947

Problem Description
  Coach Pang is interested in Fibonacci numbers while Uncle Yang wants him to do some research on Spanning Tree. So Coach Pang decides to solve the following problem:

  Consider a bidirectional graph G with N vertices and M edges. All edges are painted into either white or black. Can we find a Spanning Tree with some positive Fibonacci number of white edges?

(Fibonacci number is defined as 1, 2, 3, 5, 8, ... )

 
Input
  The first line of the input contains an integer T, the number of test cases.

  For each test case, the first line contains two integers N(1 <= N <= 105) and M(0 <= M <= 105).

  Then M lines follow, each contains three integers u, v (1 <= u,v <= N, u<> v) and c (0 <= c <= 1), indicating an edge between u and v with a color c (1 for white and 0 for black).
 
Output
  For each test case, output a line “Case #x: s”. x is the case number and s is either “Yes” or “No” (without quotes) representing the answer to the problem.
 
Sample Input
2
4 4
1 2 1
2 3 1
3 4 1
1 4 0
5 6
1 2 1
1 3 1
1 4 1
1 5 1
3 5 1
4 2 1
 
Sample Output
Case #1: Yes
Case #2: No
 
Source

2013 Asia Chengdu Regional Contest

有n个点,m条边。有黑白之分,问连通全部点时的边中,白边的个数能不能是斐波那契数列中的一个数

思路:先用白边连图。求出白边的个数,再先用黑边连图,求出白边另个值,。这两个值就是白边个数的取值范围 

2015,7,30

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define M 100000+10
struct node{
int s,e,val;
}sd[M];
int x[M];
int a[55]; bool cmp1(node a,node b){
return a.val>b.val;
}
bool cmp2(node a,node b){
return a.val<b.val;
}
void init()
{
for(int i=0;i<M;i++)
x[i]=i;
}
int find(int k)
{
if(x[k]==k) return k;
x[k]=find(x[k]);
return x[k];
}
int main()
{
int t,m,n,v=1,i;
int num,start,end; a[1]=1; a[2]=2;
for(i=3;i<55;i++)//由于边最多有100000条,所以斐波那契数大于这个数时就能够了,55足够了
a[i]=a[i-1]+a[i-2]; scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
scanf("%d%d%d",&sd[i].s,&sd[i].e,&sd[i].val); sort(sd,sd+m,cmp2);
num=0; init();
for(i=0;i<m;i++){
int fa=find(sd[i].s);
int fb=find(sd[i].e);
if(fa!=fb){
x[fa]=fb;
if(sd[i].val==1)
num++;
}
}
start=num; sort(sd,sd+m,cmp1);
num=0; init();
for(i=0;i<m;i++){
int fa=find(sd[i].s);
int fb=find(sd[i].e);
if(fa!=fb){
x[fa]=fb;
if(sd[i].val==1)
num++;
}
}
end=num; int ok=0;
for(i=1;i<=n;i++){
if(find(i)!=find(1)){
ok=1;
break;
}
}
printf("Case #%d: ",v++);
if(ok) printf("No\n");//假设没有连通全部点直接输出No
else{
for(i=1;i<50;i++){//注意这个i要从1開始,由于输入1个点0条边时要输出No。。我找了半天错= =+
if(a[i]>= start && a[i]<=end){
ok=1;
break;
}
}
if(ok) printf("Yes\n");
else printf("No\n");
}
}
return 0;
}

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

  1. HDU 4786 Fibonacci Tree 最小生成树

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

  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. HDU 4786 Fibonacci Tree(生成树,YY乱搞)

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

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

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

  5. HDU 4786 Fibonacci Tree

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

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

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

  7. HDU 4786 Fibonacci Tree (2013成都1006题) 最小生成树+斐波那契

    题意:问生成树里能不能有符合菲波那切数的白边数量 思路:白边 黑边各优先排序求最小生成树,并统计白边在两种情况下数目,最后判断这个区间就可以.注意最初不连通就不行. #include <stdi ...

  8. hdu 4786 Fibonacci Tree 乱搞 智商题目 最小生成树

    首先计算图的联通情况,如果图本身不联通一定不会出现生成树,输出"NO",之后清空,加白边,看最多能加多少条,清空,加黑边,看能加多少条,即可得白边的最大值与最小值,之后判断Fibo ...

  9. HDU 4786 Fibonacci Tree 生成树

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

随机推荐

  1. C# 二维码扫描

    Zint类用于产生二维码.https://sourceforge.net/projects/zint/ Zxing类用于读取二维码. https://github.com/zxing/zxing AF ...

  2. MyBasic架构

    MyBasic架构图 2,架构图解析 (1) (2) (3)

  3. iOS开发学习 阶段过程简述

    下面就简单介绍一下我iOS开发的感受,也是学习iOS开发的一个体系架构. 1 iOS开发环境 1.1 开发环境 标准的配置是Mac OS X + Xcode. MacOSX的话首选用苹果电脑,macm ...

  4. zclip结合easyui实现复制datagrid每行特定单元格数据的功能

    在easyui的datagrid里面,实现复制每行特定单元格的功能,关键是想想如何获取到每个单元格的数据,功能是点击按钮"复制",然后复制object的下载地址,截图如下所示: 进 ...

  5. Python图像处理(8):边缘检測

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 此前已经得到了单个区域植株图像,接下来似乎应该尝试对这些区域进行分类识别.通过外形和叶脉进行植物种 ...

  6. java使用freemarker作为模板导出Excel表格

    1:首先新建一个excel表格自己弄好格式如下图 2:把excel 表格另存为xml格式文件如下图 3:这个时候的文件就是xml 格式的文件了,在myeclipse里面项目工程里面新建一个文件后缀为. ...

  7. mongodb配置与使用

    mongodb.dll文件下载地址 http://pecl.php.net/package/mongodb/ 或者 https://windows.php.net/downloads/pecl/rel ...

  8. jquery怎样获得父级窗体的大小

    方法例如以下: $(window.parent.window).width() 注意: window能够省略.如:$(parent).width(),parent能够有多级,比方:$(parent.p ...

  9. Mycat探索之旅(4)----Mycat的自增长主键和返回生成主键ID的实现

    说明:MyCAT自增长主键和返回生成主键ID的实现 1) mysql本身对非自增长主键,使用last_insert_id()是不会返回结果的,只会返回0:这里做一个简单的测试 创建测试表 ------ ...

  10. git 基于某个分支创建分支

    1.拷贝源代码 git clone git@git地址 cd 项目目录 2.根据已有分支创建新的分支 git checkout -b yourbranchname origin/oldbranchna ...