HDU4786_Fibonacci Tree
题目很新颖的,略带智商,很好。
题目的意思是给你一些白色边和黑色边,现在问你能否用两色边构造出一颗生成树,且树中白色边的数量为一个Fibonacci数。
其实在没做题目之前我就已经听说了这个题目的解题方法了。所以。。。。。
是这样做的,我们首先判断把所有的边都加进去,看看这个图是不是连通的,如果不是,那么显然我们可以直接输出NO了。
接下来是一个很有趣的方法。我们首先把所有两端点在不同集合的白边加入到同一集合,看看最多能加多少条,再按照同样的方法把黑边加入同一集合,看看能加入多少条。
这样一来我们等于是把树中能够包含的白色边的最大数和最小数都求出来了,接下来我们只要看看在这个区间中间有木有一个Fibonacci数就可以了。
也许有人会有疑惑为什么求出最大边数和最小边数中间的每一个边数状态都可以达到呢?
其实可以这样来理解,对于一棵树由于白色边和黑色边两种,我们在任意一个状态,我们可以取出一条黑边然后用一条白边代替这条黑边并且保证这个树是联通的。
因为我们已经把最大的边数和最小的边数都算出来了。
#include <iostream>
#include <cstdio>
#include <cstring>
#define maxn 100100
using namespace std; struct edge{
int u,v;
}a[][maxn]; int s[];
int n,m,c,t,uu,vv,cc,MM,mm,cas=;
int f[maxn],g[maxn];
bool flag; void init() { for (int i=; i<=n; i++) f[i]=i; } void build(int xx,int yy) { f[f[xx]]=f[yy]; } int getf(int x)
{
if (f[x]!=x) f[x]=getf(f[x]);
return f[x];
} void addedge(int x)
{
int tot=;
init();
for (int i=; i<=s[x]; i++)
if (getf(a[x][i].u)!=getf(a[x][i].v)) tot++,build(a[x][i].u,a[x][i].v);
if (x==) mm=n--tot;
else MM=tot;
} int main()
{
g[]=,g[]=;
for (int i=; g[i]<=maxn; i++) g[i+]=g[i]+g[i-];
scanf("%d",&t);
while (t--)
{
scanf("%d%d",&n,&m);
s[]=s[]=;
for (int i=; i<=m; i++)
{
scanf("%d%d%d",&uu,&vv,&cc);
a[cc][++s[cc]].u=uu;
a[cc][s[cc]].v=vv;
}
init();
for (int i=; i<=s[]; i++)
if (getf(a[][i].u)!=getf(a[][i].v)) build(a[][i].u,a[][i].v);
for (int i=; i<=s[]; i++)
if (getf(a[][i].u)!=getf(a[][i].v)) build(a[][i].u,a[][i].v);
flag=true;
for (int i=; i<=n; i++)
if (getf(i)!=getf(i-)) { flag=false; break; }
if (!flag)
{
printf("Case #%d: No\n",++cas);
continue;
}
addedge(),addedge();
//cout<<" MM && mm : " <<mm<<' '<<MM<<endl;
flag=false;
for (int i=; g[i]<=n; i++)
if (g[i]<=MM && g[i]>=mm) { flag=true; break; }
if (flag) printf("Case #%d: Yes\n",++cas);
else printf("Case #%d: No\n",++cas);
}
return ;
}
HDU4786_Fibonacci Tree的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
随机推荐
- 20155222 2016-2017-2 《Java程序设计》第4周学习总结
20155222 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 子类会继承父类的private成员,但是无法直接存取,必须通过父类提供的方法. 多态就是使用 ...
- 20155308 2016-2017-2《Java程序设计》课程总结
20155308 2016-2017-2<Java程序设计>课程总结 每周作业链接汇总 预备作业1:回答"我专业吗.我的老师.师生关系.代码问题"四个问题. 预备作业2 ...
- 20155332 mybash的实现
mybash 的实现 码云链接 https://gitee.com/bestiisjava2017/laura5332/blob/master/%E4%BF%A1%E6%81%AF%E5%AE%89% ...
- 思维水题 poj1852
题目链接:http://poj.org/problem?id=1852 题意:木板长为n, 蚂蚁数量为k, 后面k个数,依次代表蚂蚁的位置, 当蚂蚁到达边界的时候会立马掉下,当两个蚂蚁相 ...
- 打豪车应用:uber详细攻略(附100元优步uber优惠码、uber优惠券、优步优惠码、优步优惠券)
在嘀嘀打车和快的打车交战热闹的时候,美国的打车应用uber进入中国.与在美国以个人司机注册做 Uber 司机为主的模式不同,Uber 在中国采用与租车公司合作.由租车公司提供车辆和司机的模式,同时中文 ...
- day 1类 对象 属性 方法
1. 解决吃啤酒鸭的问题 第一种方式(面向过程): 1)养鸭子 2)鸭子长成 3)杀 4)作料 5)烹饪 6)吃 7)卒 第二种方式(面向对象): 1)找个卖啤酒鸭的人 2)给钱 交易 3)吃 4)胖 ...
- 现有新的iOS更新可用,请从iOS12 beta版进行更新.解决方案
问题描述: ios系统一直弹出“现有新的iOS更新可用,请从iOS12 beta版进行更新”的提示,很烦的. 应该只出现在安装测试版ios12的手机上. 解决方案: 删除描述文件无法解决. 有网友机制 ...
- xshell连接虚拟机linux系统失败问题
问题:在xshell新建对话弹出的对话框中输入ip地址后,确定并没有弹出输入用户名和密码对话框 直接显示连接失败 Could not connect to ): Connection failed. ...
- PHP:Iterator(迭代器)接口和生成器
迭代器 可在内部迭代自己的外部迭代器或类的接口.详情:http://php.net/manual/zh/class.iterator.php 接口摘要 Iterator extends Travers ...
- Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...