HDU - 4786 Fibonacci Tree (MST)
题意:给一张由白边和黑边构成的无向图,求是否存在一个生成树,使白边的数量为一个斐波那契数。
分析:白边权值为1,黑边权值为0。求出该图的最小生成树和最大生成树,若这两个值之间存在斐波那契数,则可以,若不存在或者所给的图不是连通图,则不行。
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
typedef long long LL;
set<int> dp;
struct Edge{
int u,v,w;
}edge[maxn<<1];
int n,m;
bool cmp (const Edge & x,const Edge & y) {
return x.w<y.w;
}
bool cmp2(const Edge &x, const Edge &y) {
return x.w>y.w;
}
int fa[maxn];
void init()
{
for(int i=0;i<=n;++i) fa[i] = i;
}
int Find(int x)
{
return fa[x] ==x ? x: fa[x] = Find(fa[x]);
}
void Union(int x,int y)
{
int fx = Find(x), fy = Find(y);
fa[fx] = fy;
}
int kruskal()
{
init();
int res = 0, cnt = 0;
for(int i=1,u,v,w;i<=m;++i){
u =edge[i].u, v= edge[i].v, w =edge[i].w;
if(Find(u)!=Find(v)){
Union(u,v);
res += w;
++cnt;
if(cnt>=n-1) break;
}
}
if(cnt<n-1) return -1;
return res;
}
int kruskal2()
{
init();
int res = 0, cnt= 0;
for(int i=m,u,v,w;i>=1;--i){
u =edge[i].u, v= edge[i].v, w =edge[i].w;
if(Find(u)!=Find(v)){
Union(u,v);
res += w;
++cnt;
if(cnt>=n-1) break;
}
}
if(cnt<n-1) return -1;
return res;
}
int fib[maxn];
int pt;
void pre()
{
fib[1] = 1, fib[2] = 2;
dp.insert(1);
dp.insert(2);
int i;
for(i=3;i<maxn;++i){
fib[i] = fib[i-1] + fib[i-2];
dp.insert(fib[i]);
if(fib[i]>100000) break;
}
}
int main()
{
int T,cas=1;
scanf("%d",&T);
pre();
while(T--){
scanf("%d %d",&n, &m);
for(int i=1;i<=m;++i){
scanf("%d %d %d",&edge[i].u, &edge[i].v, &edge[i].w);
}
sort(edge+1,edge+m+1,cmp);
int t1 = kruskal();
int t2 = kruskal2();
if(t1>t2) swap(t1,t2);
printf("Case #%d: ",cas++);
bool f = false;
for(int i=t1;i<=t2;++i){
if(dp.find(i)!=dp.end()){
f = true;
break;
}
}
if(f) printf("Yes\n");
else printf("No\n");
}
return 0;
}
HDU - 4786 Fibonacci Tree (MST)的更多相关文章
- 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(生成树,YY乱搞)
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】最小生成树
一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...
- 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 乱搞 智商题目 最小生成树
首先计算图的联通情况,如果图本身不联通一定不会出现生成树,输出"NO",之后清空,加白边,看最多能加多少条,清空,加黑边,看能加多少条,即可得白边的最大值与最小值,之后判断Fibo ...
随机推荐
- Linux心得记录
2014.4.8 linux环境下如何删除一个目录? rm -r linux本身提供删除目录命令——rmdir,但是如果你要删除的目录中含有子目录或者子文件,那么该命令会提示“删除失败:目录非空“也就 ...
- SQL语句,标准表达式中数据类型不匹配
id索引进行数据查询时提示错误! 标准表达式中数据类型不匹配. 两边的单引号去掉就好了,否则是在使用文本型. 改为:去掉两个单引号 ok,成功!
- Socket长连接和短连接的区别
https://blog.csdn.net/jasonjwl/article/details/52085264 短连接 连接->传输数据->关闭连接 HTTP是无状态的,浏览器和服务器每进 ...
- openssl之EVP系列之8---EVP_Digest系列函数具体解释
openssl之EVP系列之8---EVP_Digest系列函数具体解释 ---依据openssl doc/crypto/EVP_DigestInit.pod翻译和自己的理解写成 (作 ...
- jQuery插件手把手教会(一)
jQuery插件开发教程 ——让你的jQuery水平提升一个台阶 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台 ...
- 简单是Jedis实例(相对连接池而言)
在引入相关jar包后,只要new一个Jedis对象,就能做redis相关操作了.以下是一个简单的jedis实例: package com.pptv.redis; import java.util.Ar ...
- shell脚本学习总结12--系统信号
信号是Linux系统中一种进程通信机制.我们可以使用特定的信号来中断进程.每一种信号都同一个整数值相关联. kill命令可用来想进程发送信号,而trap命令用来处理所接收的信号. kill 列出所有可 ...
- 面试题思考:Java RMI与RPC,JMS的比较
RPC:(Remote Procedure Call) 被设计为在应用程序间通信的平台中立的方式,它不理会操作系统之间以及语言之间的差异. 支持多语言 RMI:(Remote Method Invo ...
- ISP (互联网服务提供商)
ISP(Internet Service Provider),互联网服务提供商,即向广大用户综合提供互联网接入业务.信息业务.和增值业务的电信运营商. ICP(Internet Content Pro ...
- 【Python之路】Python目录
Python基础1 -- Python由来.Python种类.编码方式, Python基础2 -- Python运算符.数据类型.enumerate.range.for循环 python基础3 -- ...