HDU 4786 Fibonacci Tree(生成树,YY乱搞)
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
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, ... )
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).
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
Case #1: Yes
Case #2: No
/*
*
* 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乱搞)的更多相关文章
- HDU 4786 Fibonacci Tree 生成树
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:有N个节点(1 <= N <= 10^5),M条边(0 <= M <= ...
- hdu 4786 Fibonacci Tree (2013ACMICPC 成都站 F)
http://acm.hdu.edu.cn/showproblem.php?pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) ...
- HDU 4786 Fibonacci Tree 最小生成树
Fibonacci Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4786 Description Coach Pang is intere ...
- HDU 4786 Fibonacci Tree
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) P ...
- HDU 4786 Fibonacci Tree (2013成都1006题)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- hdu 4786 Fibonacci Tree(最小生成树)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- hdu 4786 Fibonacci Tree 乱搞 智商题目 最小生成树
首先计算图的联通情况,如果图本身不联通一定不会出现生成树,输出"NO",之后清空,加白边,看最多能加多少条,清空,加黑边,看能加多少条,即可得白边的最大值与最小值,之后判断Fibo ...
- hdu 4786 Fibonacci Tree (最小、最大生成树)
题意: N个点,M条边.每条边连接两个点u,v,且有一个权值c,c非零即一. 问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数. (fibonacii数=1,2,3,5,8 ...
- 【HDU 4786 Fibonacci Tree】最小生成树
一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...
随机推荐
- vue 数据没有驱动视图?
Part.1 问题 数据改变,视图却没有根据数据而改变. 原因在于,数据并不在 vue 监听范围之内,vue 只对事先在 data 中声明的变量丶对象等类型数据进行监听 Part.2 例子 < ...
- java中等待所有线程都执行结束
转自:http://blog.csdn.net/liweisnake/article/details/12966761 今天看到一篇文章,是关于java中如何等待所有线程都执行结束,文章总结得很好,原 ...
- tab bar controller
下面记一下怎样通过代码的方式为选项卡添加视图. 1.创建一个基于Empty Application的项目 2.创建两个新类,基类选择UIViewController,勾选With XIB for us ...
- vue获取v-model数据类型boolean改变成string
问题描述 今天产品问我一线上bug,怎么radio类型改不了 问题分析 看代码,之前的哥们儿是怎么写的 //页面 <div class="ui-form-box"> & ...
- 【2018 CCPC网络赛】1004 - 费马大定理&数学
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6441 Knowledge Point: 1. 费马大定理:当整数n >2时,关于x, y, z的 ...
- Python自动化测试框架——概述
#使用import import unittest #测试用例TestCase ''' 一个测试用例时一个完整的测试流程,包括了环境准备SetUp,测试执行Run,测试环境还原TearDown 一个测 ...
- qt5.5.1配置winpcap4.1.2
下载winpcap开发包,下载地址是http://www.winpcap.org/devel.htm 下载之后解压
- ps---图层,移动工具
1.移动图层从一个文件到另一个文件相当于复制,如果俩文件大小相同,开始移动后,按下shift键,可保持原来位置.若不相同,拖拽后,按shift,则会自动居中.如果目标文档包含选区,会到选区的中央. 2 ...
- Python通过Openpyxl包汇总表格,效率提升100倍
最近找了份小兼职,干的全是些无聊的工作,比如说给word调整一下排版啦.把从多方回收来的Excel汇总啦,这些极其催眠又耗时的事,怎么能接受手动去做呢!!(疯了嘛,谁知道以后还有多少类似的表格要汇总啊 ...
- solr中的schema.xml(managed-schema)文件解读
solr 7.2.1版本managed-schema文件示例 <uniqueKey>id</uniqueKey> 唯一键字段,solr对每一个文档都赋予一个唯一标识符字段,避免 ...