hdu 4786 最小生成树与最大生成树
/*
题意 :有一些边权值为1和0,判断是否存在一个生成树使得他的总权值为一个斐波那契数。
解法:建立一个最小生成树向里面加权值为1的边替换为0的边,保证原来的联通。因为权值为1,可直接求出最大生成树和最小生成树。
判断他们中间是否有斐波那契数即可,当然要先判断是否可以构成一个生成树。
这个我刚开始忘判断了。
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 110000
struct node
{
int u,v,w;
} bian[N];
int f[N*2],flag[N*2],pre[N];
int cmp(const void *a,const void *b)
{
return (*(struct node *)a).w-(*(struct node *)b).w;
}
int find(int x)
{
if(x!=pre[x])
pre[x]=find(pre[x]);
return pre[x];
}
int cmpp(const void *a,const void *b)
{
return (*(struct node *)b).w-(*(struct node *)a).w;
}
int main()
{
int t,m,n,i,j=0,k,suma,sumb,d;
memset(flag,0,sizeof(flag));
f[0]=1;
f[1]=1;
flag[1]=1;
for(i=2; i<=25; i++)
{
f[i]=f[i-1]+f[i-2];
flag[f[i]]=1;
// printf("%d ",f[i]);
}
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
for(i=0; i<m; i++)
scanf("%d%d%d",&bian[i].u,&bian[i].v,&bian[i].w);
qsort(bian,m,sizeof(bian[0]),cmp);
for(i=1; i<=n; i++)
pre[i]=i;
k=0;
suma=0;
for(i=0; i<m&&k<n-1; i++)
{
int u=find(bian[i].u);
int v=find(bian[i].v);
if(u!=v)
{
pre[u]=v;
k++;
suma+=bian[i].w;
}
}
if(i==m&&k!=n-1) {//注意判断无法生成最小生成树的条件
printf("Case #%d: No\n",++j);
continue;
}
for(i=1; i<=n; i++)
pre[i]=i;
qsort(bian,m,sizeof(bian[0]),cmpp);
k=0;
sumb=0;
for(i=0; i<m&&k<n-1; i++)
{
int u=find(bian[i].u);
int v=find(bian[i].v);
if(u!=v)
{
pre[u]=v;
k++;
sumb+=bian[i].w;
}
}
d=0;
for(i=suma; i<=sumb; i++)
if(flag[i]){
d=1;
break;
}
if(d)
printf("Case #%d: Yes\n",++j);
else
printf("Case #%d: No\n",++j);
}
return 0;
}
hdu 4786 最小生成树与最大生成树的更多相关文章
- HDU 4786 最小生成树变形 kruscal(13成都区域赛F)
Fibonacci Tree Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- 【HDU 4786 Fibonacci Tree】最小生成树
一个由n个顶点m条边(可能有重边)构成的无向图(可能不连通),每条边的权值不是0就是1. 给出n.m和每条边的权值,问是否存在生成树,其边权值和为fibonacci数集合{1,2,3,5,8...}中 ...
- hdu 4786 Fibonacci Tree (最小、最大生成树)
题意: N个点,M条边.每条边连接两个点u,v,且有一个权值c,c非零即一. 问能否将N个点形成一个生成树,并且这棵树的边权值和是一个fibonacii数. (fibonacii数=1,2,3,5,8 ...
- HDU - 4786 Fibonacci Tree (MST)
题意:给一张由白边和黑边构成的无向图,求是否存在一个生成树,使白边的数量为一个斐波那契数. 分析:白边权值为1,黑边权值为0.求出该图的最小生成树和最大生成树,若这两个值之间存在斐波那契数,则可以,若 ...
- HDU 1233(最小生成树)
HDU 1233(最小生成树 模板) #include <iostream> #include <algorithm> #include <cstdio> usin ...
- HDU 4786 Fibonacci Tree 最小生成树
Fibonacci Tree 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4786 Description Coach Pang is intere ...
- 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(最小生成树 kruskal)
题目链接:pid=4786" target="_blank">http://acm.hdu.edu.cn/showproblem.php?pid=4786 Prob ...
- HDU 4786 Fibonacci Tree 生成树
链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:有N个节点(1 <= N <= 10^5),M条边(0 <= M <= ...
随机推荐
- JSP-Runoob:JSP 表达式语言
ylbtech-JSP-Runoob:JSP 表达式语言 1.返回顶部 1. JSP 表达式语言 JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单.JSP EL既可以用来创建 ...
- Kubernetes 集群中使用 Helm 搭建 Spinnaker
在我们部署Spinnaker之前,我们需要一个YAML格式的配置文件,它会包含了一些配置信息.可以从Spinnaker Helm Chart repository[2]获得这个文件. $curl -L ...
- Rails mysql数据库连接的小坑
基本上直接clone下来的话,数据库连接必失败. 注意,把用户名密码写在.env文件下
- vue工程npm run serve/start/dev启动时,node_modules文件报:Cannot read property 'range' of null 错误
改问题是"babel-eslint"版本更新问题导致的: 给大家一个最简单粗暴的解决方案: 在项目里找到对应的工程:直接删除里面的node_modules文件夹,然后重新npm i ...
- 跨域请求之jsonp
1.什么是跨域请求: 服务器A上的一个页面,要请求服务器B上的一个处理程序,这就叫做跨域请求 本次的测试页面为: 处理程序kimhandler.ashx,如下: http://qxw119243026 ...
- nginx下如何配置 ssl证书?腾讯云ssl证书为例!
nginx下如何配置 ssl证书?腾讯云ssl证书为例! 目前为止,https已经成为一种趋势,想要开启https就需要ssl证书. 首先,为域名注册ssl证书. 腾讯云注册地址:https://cl ...
- Resources.getResourceAsReader 报空指针
1.maven项目中 可能未编译 导致找不到, 解决方法:mvn clean install -DskipTests -X 编译一下项目 2.可能在 Resources.getResourceAs ...
- Redis主从复制失败(master_link_status:down)
今天配置redis主从复制时出现master_link_status:down提示. 首先打开slave的redis.conf配置文件,确定slaveof 和masterauth 两个选项配置是否正确 ...
- SQL基本操作——HAVING
HAVING:在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用. 我们拥有下面这个 "Orders" 表: O_Id OrderDate Or ...
- Linux Shell 小知识
${} ——变量替换 通常 $var 与 ${var} 没有区别,但是用 ${} 会比较精确的界定变量名称的范围. name='Ace' echo "result1: my name is ...