hdu 4786 Fibonacci Tree (最小、最大生成树)
题意:
N个点,M条边。每条边连接两个点u,v,且有一个权值c,c非零即一。
问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数。 (fibonacii数=1,2,3,5,8 .... )
思路:
若可以生成一棵树。则有最小生成树和最大生成树。假设已经生成了最小MST P 和最大MST Q。
将P更换一条边可以得到另一棵生成树,边权和不是和P相等就是比P的边权和大1。(因为边值非零即一)。同理搞下去....一定可以得到Q。
所以P的边权和到Q的边权和之间的所有值都能得到。故判断之间是否存在fibonacii数即可。
代码:
struct node{
int u,v,c;
}edge[100005]; bool cmp(node a,node b){
return a.c<b.c;
} int fa[100005];
int T,n,m; int findFa(int x){
return fa[x]==x?x:fa[x]=findFa(fa[x]);
} int kruskal1(){
rep(i,1,n) fa[i]=i;
int res=0;
rep(i,1,m){
int fx=findFa(edge[i].u);
int fy=findFa(edge[i].v);
if(fx!=fy){
fa[fx]=fy;
res+=edge[i].c;
}
}
int tx=findFa(1);
rep(i,2,n) if(findFa(i)!=tx) return -1;
return res;
}
int kruskal2(){
rep(i,1,n) fa[i]=i;
int res=0;
rep2(i,m,1){
int fx=findFa(edge[i].u);
int fy=findFa(edge[i].v);
if(fx!=fy){
fa[fx]=fy;
res+=edge[i].c;
}
}
int tx=findFa(1);
rep(i,2,n) if(findFa(i)!=tx) return -1;
return res;
} bool isFibo[100005]; void FiboD(){
mem(isFibo,false);
int a=1,b=2; isFibo[1]=isFibo[2]=true;
for(;;){
int t=a+b;
a=b, b=t;
if(t>100000) break;
isFibo[t]=true;
}
} int main(){
//freopen("test.in","r",stdin);
cin>>T;
FiboD();
rep(t,1,T){
scanf("%d%d",&n,&m);
rep(i,1,m)
scanf("%d%d%d",&edge[i].u,&edge[i].v,&edge[i].c);
sort(edge+1,edge+1+m,cmp);
int mins=kruskal1();
int maxs=kruskal2(); printf("Case #%d: ",t);
if(mins==-1 || maxs==-1) puts("No");
else{
bool flag=false;
rep(i,mins,maxs) if(isFibo[i]){
flag=true;
break;
}
if(flag) puts("Yes"); else puts("No");
}
}
//fclose(stdin);
}
hdu 4786 Fibonacci Tree (最小、最大生成树)的更多相关文章
- 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 (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 生成树
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:有N个节点(1 <= N <= 10^5),M条边(0 <= M <= ...
- 【HDU 4786 Fibonacci Tree】最小生成树
一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...
- hdu 4786 Fibonacci Tree 乱搞 智商题目 最小生成树
首先计算图的联通情况,如果图本身不联通一定不会出现生成树,输出"NO",之后清空,加白边,看最多能加多少条,清空,加黑边,看能加多少条,即可得白边的最大值与最小值,之后判断Fibo ...
随机推荐
- js判断苹果端,安卓端
<script type="text/javascript"> var browser = { versions : function() { var u = navi ...
- PHPMailer实现发送邮件的方法介绍
来自: https://www.php.cn/php-weizijiaocheng-408762.html PHPmailer请在github下载,或者直接百度,也不难,虽然PHPmailer里面一大 ...
- CI框架页面打开空白,无报错为解决方法新环境
1.打开错误显示,可以在控制controllers的首页入口加入以下代码,查看错误 error_reporting(-1); ini_set('display_errors', 1); //插入显示所 ...
- 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统
在前面随笔<使用uView UI+UniApp开发微信小程序>和<使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转>介绍了微信小程序的常规登录处理和验 ...
- find_elements与find_element的区别
find_element不能使用len,find_elements可以使用len获取元素数量,判断页面有无某个元素,这个方法可以用来断言. 如添加用户后,判断是否添加成功. 删除用户后,判断是否删除成 ...
- 大前端快闪二:react开发模式 一键启动多个服务
最近全权负责了一个前后端分离的web项目,前端使用create-react-app, 后端使用golang做的api服务. npx create-react-app my-app cd my-app ...
- span标签的巧用
前言: 用struts的标签结合<td>标签将后台数据在表格里渲染了出来,目前需求是需要将两个状态组合在一起显示 解决:通过span标签在td里的套用可以实现 <logic:notE ...
- php页面 数组根据下标来排序
$a = [ ['id'=>1,'title'=>'星期二的早晨','author'=>'张三','date'=>'2021-6-1'], ['id'=>2,'title ...
- 如何借助 JuiceFS 为 AI 模型训练提速 7 倍
背景 海量且优质的数据集是一个好的 AI 模型的基石之一,如何存储.管理这些数据集,以及在模型训练时提升 I/O 效率一直都是 AI 平台工程师和算法科学家特别关注的事情.不论是单机训练还是分布式训练 ...
- Unity Event Trigger 事件响应(二维,三维)添加组件
EventTrigger 上主要的方法有PointerEnter.PointerExit.PointerDown.PointerUp.PointerClick............都会显示在面板上面 ...