【最小生成树】【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 ...
随机推荐
- vue双向绑定原理源码解析
当我们学习angular或者vue的时候,其双向绑定为我们开发带来了诸多便捷,今天我们就来分析一下vue双向绑定的原理. 简易vue源码地址:https://github.com/maxlove123 ...
- setTimeout()和setInterval()方法的区别
setTimeout(); //5秒后执行yourFunction(),只执行一次 setInterval(); //每隔5秒执行一次 1.setTimeout(funhander,time)的作用是 ...
- zoj2001 Adding Reversed Numbers
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2001 Adding Reversed Numbers Time ...
- 关于c++的string的operator =
在 c++ primer 5 中在说到string的章节里面有这样一句话: string s5 = "hiya"; // copy initialization 也就是说,这里说上 ...
- supervisor error: <class 'socket.error'>, [Errno 110]
supervisorctr status报错 error: <class 'socket.error'>, [Errno 110] Connection timed out: file: ...
- (转)函数后面加const--C++ const成员函数
类的成员函数后面加 const,表明这个函数不会对这个类对象的数据成员(准确地说是非静态数据成员)作任何改变. 在设计类的时候,一个原则就是对于不改变数据成员的成员函数都要在后面加 const,而对于 ...
- linux命令(42):wc命令
Linux系统中的wc(Word Count)命令的功能为统计指定文件中的字节数.字数.行数,并将统计结果显示输出. 1.命令格式: wc [选项]文件... 2.命令功能: 统计指定文件中的字节数. ...
- python和语法糖
语法糖(syntactic sugar)是指编程语言中可以更容易的表达一个操作的语法,它可以使程序员更加容易去使用这门语言:操作可以变得更加清晰.方便,或者更加符合程序员的编程习惯.(百度百科的 ...
- 基础平台为第三方应用接入提供oauth2认证接口
oauth2开放认证协议原理及案例分析 http://blog.csdn.net/volcan1987/article/details/7287605 谈谈基于OAuth 2.0的第三方认证 [上篇] ...
- AC日记——[SCOI2009]游戏 bzoj 1025
[SCOI2009]游戏 思路: 和为n的几个数最小公倍数有多少种. dp即可: 代码: #include <bits/stdc++.h> using namespace std; #de ...