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 ...
随机推荐
- abp core版本添加额外应用层
1.新建类库WebProject.Application.App 2.添加WebProjectApplicationAppModule.cs 3.注册模块 using Abp.Application. ...
- CTF--zip伪加密
刷题 一.BUGKU WEB 1. 变量1 知识点php两个$$是 可变变量,就是一个变量的变量名可以动态的设置和使用 $GLOBALS一个包含了全部变量的全局组合数组.变量的名字就是数组的键 < ...
- Python不生成HTMLTestRunner报告-转载学习
1.问题:Python中同一个.py文件中同时用unittest框架和HtmlReport框架后,HtmlReport不被执行. 2.为什么?其实不是HtmlReport不被执行,也不是HtmlRep ...
- 【UGUI】 (二)--------- 小地图
在绝大多数游戏中,小地图都是极为常见的一个模块而且十分重要.在Unity里面如何制作一个地图其实也是比较简单的 一. 创建玩家与敌人 创建一个Capsule,命名为Player,代表我们的游戏玩家,创 ...
- Kubernetes-----Endpoints
Endpoints是实现实际服务的端点集合. Kubernetes在创建Service时,根据Service的标签选择器(Label Selector)来查找Pod,据此创建与Service同名的En ...
- Docker入门与实践之 docker安装与了解
一.Docker 概述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...
- Leetcode_2. Add_Two_Number
2. Add_Two_Number 用两个非空链表分别表示两个非负整数,链表的节点表示数字的位,链表头表示数字的低位,链表尾表示数字高位.求两个链表所表示数字的和. 比如: Input: (2 -&g ...
- 如何更改Arcmap里经纬度小数点后面的位数?
customize>arcmap option>data view >round coordinate to 改成想要显示的小数位数
- centos下安装升级python到python3.5
本文摘抄自:https://www.cnblogs.com/edward2013/p/5289056.html 请支持原版 CentOS7安装Python3.5 2. 安装Python的依赖包 ...
- 详讲H5、WebApp项目中常见的坑以及注意事项
首先我们中会有一些常用的meta标签,如下: <!--防止手机中网页放大和缩小--> <meta name="viewport" content="wi ...