【最小生成树】【kruscal】hdu4786 Fibonacci Tree
假设这张图能够形成具有k条白边的生成树,
则易证k一定形成一个连续的区间[a,b],中间一定不会断开。要是断开……tm怎么可能。
所以求出a,b就好啦,人家都给你把白边赋成1了,直接跑一下最小生成树,再跑一下最大生成树即可咯。
#include<cstdio>
#include<algorithm>
using namespace std;
#define N 100010
struct Edge{
int u,v,w;
}edges[N];
bool cmp(const Edge &a,const Edge &b){
return a.w<b.w;
}
bool cm2(const Edge &a,const Edge &b){
return a.w>b.w;
}
int T,n,m,a[1010],mm;
int fa[N];
int findroot(int x){
return x==fa[x] ? x : fa[x]=findroot(fa[x]);
}
int kruscal(){
for(int i=1;i<=n;++i){
fa[i]=i;
}
int tot=0,sum=0;
for(int i=1;i<=m;++i){
int f1=findroot(edges[i].u),f2=findroot(edges[i].v);
if(f1!=f2){
fa[f1]=f2;
++tot;
sum+=edges[i].w;
if(tot==n-1){
return sum;
}
}
}
return -1;
}
int main(){
// freopen("f.in","r",stdin);
scanf("%d",&T);
a[1]=1; a[2]=2;
for(int i=3;;++i){
a[i]=a[i-1]+a[i-2];
if(a[i]>100000){
mm=i-1;
break;
}
}
for(int zu=1;zu<=T;++zu){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;++i){
scanf("%d%d%d",&edges[i].u,&edges[i].v,&edges[i].w);
}
sort(edges+1,edges+m+1,cmp);
int minn=kruscal();
sort(edges+1,edges+m+1,cm2);
int maxx=kruscal();
if(minn==-1 || maxx==-1){
printf("Case #%d: No\n",zu);
continue;
}
bool flag=0;
for(int i=1;i<=mm;++i){
if(a[i]>=minn && a[i]<=maxx){
flag=1;
printf("Case #%d: Yes\n",zu);
break;
}
}
if(!flag){
printf("Case #%d: No\n",zu);
}
}
return 0;
}
【最小生成树】【kruscal】hdu4786 Fibonacci Tree的更多相关文章
- hdu4786 Fibonacci Tree (最小生成树)
		题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:给定图的n个点和m条双向边,告诉你每条边的权值.权值为1表示该边是白边,权值为0表示该边为 ... 
- hdu4786 Fibonacci Tree[最小生成树]【结论题】
		一道结论题:如果最小生成树和最大生成树之间存在fib数,成立.不存在或者不连通则不成立.由于是01图,所以这个区间内的任何生成树都存在. 证明:数学归纳?如果一棵树没有办法再用非树边0边替代1边了,那 ... 
- 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(最小生成树)
		Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ... 
- HDU 4786 Fibonacci Tree (2013成都1006题)
		Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ... 
- POJ 4786 Fibonacci Tree
		Fibonacci Tree Time Limit: 2000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ... 
- HDU 4786 Fibonacci Tree
		Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) P ... 
随机推荐
- js监听浏览器后退事件
			$(document).ready(function(e) { var counter = 0; if (window.history && ... 
- 初识费用流 模板(spfa+slf优化) 餐巾计划问题
			今天学习了最小费用最大流,是网络流算法之一.可以对于一个每条边有一个容量和一个费用(即每单位流的消耗)的图指定一个源点和汇点,求在从源点到汇点的流量最大的前提下的最小费用. 这里讲一种最基础也是最好掌 ... 
- Python参数输入模块-optparse
			废话: 模块名是optparse, 很多人打成optparser.以至于我一直导入导入不了.搞的不知所以. 模块的使用: import optparse #usage 定义的是使用方法,%prog 表 ... 
- Exception 和 Error 包结构
- python基础===单元测试unittest
			''' 编写一个名为Employee 的类,其方法__init__()接受名.姓和年薪,并 将它们都存储在属性中.编写一个名为give_raise()的方法,它默认将年薪增加5000 美元,但也能够接 ... 
- 在64位linux下编译32位程序
			在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783 
- Mac  iphone  使用  如何修改apple 用户名  XXX的mac  Mac 与iphone如何连接 传递文件 为iphone增加铃声  iphone铃声的制作---城
			1.更改mac apple id Apple ID 即用户名称,您可以将其用于与 Apple 有关的所有操作.为某个 Apple 服务(如 iCloud 或 App Store)创建帐户时即创建了 A ... 
- MACBOOK 总是断网怎么办
			MACBOOK 连接 wifi 老是断网.焦躁不安 看图,二个方法,第一就搞定, 
- linux命令(47):rmdir命令
			1.命令格式: rmdir [选项]... 目录... 2.命令功能: 该命令从一个目录中删除一个或多个子目录项,删除某目录时也必须具有对父目录的写权限. 3.命令参数: - p 递归删除目录dirn ... 
- Oracle11g常用的命令
			cmd H: cd H:\oracle\product\\Db_1\BIN exp jz/jz file=C:/QS-BF20131017.dmp (备份) imp jz/jz file=C:/BF2 ... 
