hdu 4786 Fibonacci Tree (最小、最大生成树)
2024-09-05 01:45:36
题意:
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);
}
最新文章
- iOS 下拉刷新-上拉加载原理
- OWIN 中 K Commands 与 OwinHost.exe 相等吗?
- MySQL-多条件拼接语句
- 用JS修改checkbox的选中状态
- Android ListView onItemClick Not Work
- Redis中的发布与订阅
- An Oblivious Watermarking for 3-D Polygonal Meshes Using Distribution of Vertex Norms
- WordPress Pretty Photo插件‘hashrel’参数跨站脚本漏洞
- HDU1251 统计难题(Trie)
- Windows Server 2003 SP2企业版ISO下载, windows2003系统下载,2003系统下载,2003系统
- Convert Sorted List to Binary Search Tree java
- nefu 753 n!末尾有多少个0
- JDK 1.8判断集合种的元素是否存在相同
- Direct3D 11 Tutorial 5: 3D Transformation_Direct3D 11 教程5:3D转型
- 洗礼灵魂,修炼python(56)--爬虫篇—知识补充—编码之url编码
- SharePoint 2010:搜索服务当前处于脱机状态
- android程序监听home键与电源键
- C# FTP删除文件以及文件夹
- 整合swagger2生成Restful Api接口文档
- VS2010程序崩溃- APPCRASH
热门文章
- IDEA 集成 Docker 插件实现一键远程部署 SpringBoot 应用,无需三方依赖,开源微服务全栈项目有来商城云环境的部署方式
- 使用metaweblog API实现通用博客发布 之 版本控制
- php保留2位小数方法
- jdbc 数据库连接 长时间空闲 断开连接 ApplicationContext.xml
- english note(6.3 to 6.8)
- ASP.NET Core 中间件的使用(三):全局异常处理机制
- Social Networ
- Go语言核心36讲(导读)--学习笔记
- H5移动端适配方案-rem
- SpringBoot-使用异步