http://acm.hdu.edu.cn/showproblem.php?

pid=4786

Fibonacci Tree
Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 1733    Accepted Submission(s): 543
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
 

题意:
给出一个无向图,每条边都已染色(黑/白),问是否存在生成树,该生成树的白色边的数量是正的fibonacci数。

分析:
所给数据中黑边为0。白边为1,那么生成树的白边数量即为生成树的权和。
然后YY了一个做法:求其最小和最大生成树,假设在这个范围内存在fibonacci数则存在。

靠谱的证明方法一直没想出来,这里随便解释下:
对于随意一颗非最大生成树。一定能够取一条白边换一条黑边使其仍然是一颗树。

/*
*
* Author : fcbruce
*
* Time : Mon 06 Oct 2014 01:06:30 PM CST
*
*/
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <algorithm>
#include <ctime>
#include <cctype>
#include <cmath>
#include <string>
#include <cstring>
#include <stack>
#include <queue>
#include <list>
#include <vector>
#include <map>
#include <set>
#define sqr(x) ((x)*(x))
#define LL long long
#define itn int
#define INF 0x3f3f3f3f
#define PI 3.1415926535897932384626
#define eps 1e-10 #ifdef _WIN32
#define lld "%I64d"
#else
#define lld "%lld"
#endif #define maxm 100007
#define maxn 100007 using namespace std; int fib[maxn];
struct _edge
{
int u,v,w;
bool operator < (const _edge &_)const
{
return w<_.w;
}
}edge[maxm]; int pre[maxn]; int root(int x)
{
if (x==pre[x]) return x;
return pre[x]=root(pre[x]);
} bool same(int x,int y)
{
return root(x)==root(y);
} void _merge(itn x,int y)
{
pre[root(x)]=root(y);
} int cnt,fib_cnt; int main()
{
#ifdef FCBRUCE
freopen("/home/fcbruce/code/t","r",stdin);
#endif // FCBRUCE int T_T,__=0;
scanf("%d\n",&T_T); fib[0]=1;
fib[1]=1;
fib_cnt=2;
for (int i=2;;i++)
{
fib[i]=fib[i-1]+fib[i-2];
fib_cnt++;
if (fib[i]>100000) break;
} while (T_T--)
{
printf("Case #%d: ",++__);
int n,m;
scanf("%d%d",&n,&m);
for (int i=1;i<=n;i++) pre[i]=i;
cnt=n;
for (int i=0,u,v,w;i<m;i++)
{
scanf("%d%d%d",&u,&v,&w);
if (!same(u,v)) {_merge(u,v);cnt--;}
edge[i]=(_edge){u,v,w};
} if (cnt!=1)
{
printf("No\n");
continue;
} sort(edge,edge+m); for (int i=1;i<=n;i++) pre[i]=i;
int MIN=0;
cnt=n;
for (int i=0,u,v,w;i<m;i++)
{
u=edge[i].u;v=edge[i].v;w=edge[i].w;
if (!same(u,v))
{
_merge(u,v);
MIN+=w;
cnt--;
if (cnt==1) break;
}
} for (int i=1;i<=n;i++) pre[i]=i;
int MAX=0;
cnt=n;
for (int i=m-1,u,v,w;i>=0;i--)
{
u=edge[i].u;v=edge[i].v;w=edge[i].w;
if (!same(u,v))
{
_merge(u,v);
MAX+=w;
cnt--;
if (cnt==1) break;
}
} int idmin=lower_bound(fib,fib+fib_cnt,MIN)-fib;
int idmax=lower_bound(fib,fib+fib_cnt,MAX)-fib; if (fib[idmin]!=MIN && fib[idmax]!=MAX && idmin==idmax)
puts("No");
else
puts("Yes"); } return 0;
}

HDU 4786 Fibonacci Tree(生成树,YY乱搞)的更多相关文章

  1. HDU 4786 Fibonacci Tree 生成树

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

  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 最小生成树

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

  4. HDU 4786 Fibonacci Tree

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

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

    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 乱搞 智商题目 最小生成树

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

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

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

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

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

随机推荐

  1. 闲着蛋疼没事干,写个Mac端的Kcptun Client管理器

    原理: 执行一行脚本 输入服务器地址,端口,密码等做了图形化编辑 可以控制Kcptun是否正在运行 App已上传github https://github.com/nicky2k8/KcptunCli ...

  2. DFS、BFS和Backtracking模板

    区别与联系 区别 DFS多用于连通性问题因为其运行思想与人脑的思维很相似,故解决连通性问题更自然,采用递归,编写简便(但我个人不这样觉得...) DFS的常数时间开销会较少.所以对于一些能用DFS就能 ...

  3. LinuxMint 编译 LittlevGL GUI

    编译必须 安装arm-linux-gcc-4.4.3.tar.gz PC simulator You can try out the Littlev Graphics Library using on ...

  4. Spring-1-IOC

    IOC与DI的区别? IOC:控制反转(Inversion of Control是面向对象的一种设计原则,可以用来降低计算机之间的耦合度,其中最常见的是依赖注入).是实现的目标 DI:是实现IOC的一 ...

  5. EBS ORACLE工单齐套率的计算程序

    PROCEDURE Get_wip_accept_item_date(p_use_id in number, p_org_id IN NUMBER, p_start_date IN DATE, p_e ...

  6. ios 封装sqllite3接口

    2013-03-25 17:41 261人阅读 评论(0) 收藏 举报 // #import <Foundation/Foundation.h> #import "sqlite3 ...

  7. js div大小随意伸缩

    <!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...

  8. luogu P1238 走迷宫--DFS模板好(水)题

    题目描述 有一个m*n格的迷宫(表示有m行.n列),其中有可走的也有不可走的,如果用1表示可以走,0表示不可以走,文件读入这m*n个数据和起始点.结束点(起始点和结束点都是用两个数据来描述的,分别表示 ...

  9. windows10下Anaconda的安装与tensorflow、opencv的安装与环境配置

    刚开始学习tensorflow和opencv这一块的知识,所以用博客这个平台来把自己这段学习的经历与感想写下来. tensorflow和opencv则用Anaconda来下载和配置环境. 下载Anac ...

  10. qemu-img命令

    qemu-img是QEMU的磁盘管理工具,在qemu-kvm源码编译后就会默认编译好qemu-img这个二进制文件.qemu-img也是QEMU/KVM使用过程中一个比较重要的工具,本节对其用法和实践 ...