LA 6540 Fibonacci Tree
以前做过的题···重新做一遍之后怎么做怎么wa···后来GG了···第二天看不知道为啥A了···难道我失忆了?
题意:无向图,边有黑色和白色两种颜色,求是否存在一个生成树中白边的个数是斐波那契数。
解法:并查集。对边按颜色进行排序,白边在前用并查集计算生成树中白边个数,再倒着算一遍,得到生成树的白边的最大值和最小值,判断其中有没有斐波那契数,注意要判断是否能构成生成树。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
int father[100005], f[100010] = {0};
struct node
{
int u, v, c;
} edge[100005];
bool cmp(node a, node b)
{
return a.c > b.c;
}
int FIND(int a)
{
if(father[a] != a)
father[a] = FIND(father[a]);
return father[a];
}
int main()
{
f[1] = 1;
int f1 = 1, f2 = 1, f3 = 2;
while(f3 < 100010)
{
f[f3] = 1;
f1 = f2;
f2 = f3;
f3 = f1 + f2;
}//斐波那契数打表
int T;
while(~scanf("%d", &T))
{
int cse = 1;
while(T--)
{
int n, m, ans = 1;
scanf("%d%d", &n, &m);
for(int i = 0; i < m; i++)
scanf("%d%d%d", &edge[i].u, &edge[i].v, &edge[i].c);
sort(edge, edge + m, cmp);
int l = 0, r = 0;
for(int i = 0; i <= n; i++)
father[i] = i;
for(int i = 0; i < m; i++)
{
int a, b;
a = FIND(edge[i].u);
b = FIND(edge[i].v);
if(a != b)
{
r += edge[i].c;
father[a] = b;
}
}//计算白边最大值r
int flag = FIND(1);
for(int i = 2; i <= n; i++)
if(FIND(i) != flag)
{
ans = 0;
break;
}//判断是否有生成树
if(ans)
{
ans = 0;
for(int i = 0; i <= n; i++)
father[i] = i;
for(int i = m-1; i >= 0; i--)
{
int a, b;
a = FIND(edge[i].u);
b = FIND(edge[i].v);
if(a != b)
{
l += edge[i].c;
father[a] = b;
}
}//计算白边最小值l
for(int i = l; i <= r; i++)
if(f[i])
{
ans = 1;
break;
}
}
if(ans)
cout << "Case #" << cse++ << ": Yes" << endl;
else
cout << "Case #" << cse++ << ": No" << endl;
}
}
return 0;
}
最近想改变一下代码风格···结果连字都快不会打了orz
LA 6540 Fibonacci Tree的更多相关文章
- 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 (2013ACMICPC 成都站 F)
http://acm.hdu.edu.cn/showproblem.php?pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) ...
- hdoj 4786 Fibonacci Tree【并查集+最小生成树(kruskal算法)】
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- Fibonacci Tree(最小生成树,最大生成树)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- HDU 4786 Fibonacci Tree 最小生成树
Fibonacci Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4786 Description Coach Pang is intere ...
- 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(生成树,YY乱搞)
http://acm.hdu.edu.cn/showproblem.php? pid=4786 Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others ...
- POJ 4786 Fibonacci Tree
Fibonacci Tree Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ...
随机推荐
- having count(*) > 1
select phone from aa group by phone having count(*) > 1 后面的having子句是什么意思啊? 以phone分组,分组后每组里面phone出 ...
- 第1章 Git的版本控制之道
版本控制系统(Version Control System,VCS)可以帮助我们记录和跟踪项目中各文件内容的修改变化. 1.1 版本库 版本库(Repository)是版本控制系统用来存储所有历史数据 ...
- 经典好文:android和iOS平台的崩溃捕获和收集
通过崩溃捕获和收集,可以收集到已发布应用(游戏)的异常,以便开发人员发现和修改bug,对于提高软件质量有着极大的帮助.本文介绍了iOS和android平台下崩溃捕获和收集的原理及步骤,不过如果是个人开 ...
- iOS 本地存储四种方法
在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题.将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好.下面介绍⼀一下数据保存的方式: 1.NSKeye ...
- (转)为什么adrl r2,mem_cfg_val这里不用ldr r2,=mem_cfg_val
网址:http://blog.csdn.net/glorin/article/details/6327083 memsetup:mov r1, #MEM_CTL_BASEadrl r2,mem_cfg ...
- 【技术贴】删除360快捷搜索 ctrl+ctrl
恶心的功能,这么变态!如何删除360快捷键ctrl,桌面跳出360搜索怎么办?360 ctrl 删除 卸载方法: 桌面右下角,在360图标上右键点击设置,进入设置中心. 把 [开启快捷搜索功能,双击C ...
- 如果Java 失宠于Oracle,那么未来会怎么样?
[编者按]对于前不久 Oracle 裁掉了一部分 Java 布道师,近日一位 Oracle 前高管称其为该机构对Java的「计划报废」.如果这个计划是属实的,那么对于寻常的开发者.已经采用了 Java ...
- 【leetcode】Combination Sum II (middle) ☆
Given a collection of candidate numbers (C) and a target number (T), find all unique combinations in ...
- POJ3096Surprising Strings(map)
题意:输入很多字符串,以星号结束.判断每个字符串是不是“Surprising Strings”,判断方法是:以“ZGBG”为例,“0-pairs”是ZG,GB,BG,这三个子串不相同,所以是“0-un ...
- C#连接SQLite的字符串
一.C#在不同情况下连接SQLite字符串格式 1.Basic(基本的) Data Source=filename;Version=3; 2.Using UTF16(使用UTF16编码) Data S ...