博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2489 Minimal Ratio Tree 最小生成树kruskal
阅读量:4073 次
发布时间:2019-05-25

本文共 1353 字,大约阅读时间需要 4 分钟。

这道题在大一团队训练赛上见过,很多人一次过了,是一道dfs+最小生成树,王昊天学长讲的时候也是三言两语带过,我有点不确定哈理工的水平什么·时候这么高了。。

组合dfs取出m个点,用这m个点构建最小生成树,这m个点的权值和是一定的,故边权值最小,则比才会最小;

思路:在Edge中选最小的,若这两点有一个不是m个点中的,就不把它放入树中;以为自己过不了,结果一次ac;

这道题有很多人卡在权值比上,精度没把握好的就会wr,其实用乘法更好,解决了精度问题;

幸好我提前看了discuss,发现了坑和解决办法;

代码:

#include
#include
#include
using namespace std;int n,m;const int maxn=400;int edge_wei[maxn][maxn];int node_wei[maxn];int fa[maxn];int visit[maxn];int k[maxn];int nw;int ew;int start;int shu;struct Edge{ int u; int v; int weight;};Edge a[maxn];void init(){ int i; for(i=1;i<=n;i++) fa[i]=i;}int find(int u){ return fa[u]==u?fa[u]:fa[u]=find(fa[u]);}void join(int u,int v){ fa[find(u)]=find(v);}bool cmp(Edge x,Edge y){ return x.weight
>n>>m) { if(n==0&&m==0) break; int i,j; memset(visit,0,sizeof(visit)); start=0; for(i=1;i<=n;i++) { cin>>node_wei[i]; } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cin>>edge_wei[i][j]; if(j>=i) continue; a[start].u=i; a[start].v=j; a[start++].weight=edge_wei[i][j]; } } sort(a,a+start,cmp); nw=1; ew=1500; select(1,1); for(i=0;i

转载地址:http://jygji.baihongyu.com/

你可能感兴趣的文章
Redis持久化存储(AOF与RDB两种模式)
查看>>
memcached工作原理与优化建议
查看>>
Redis与Memcached的区别
查看>>
redis sharding方案
查看>>
程序员最核心的竞争力是什么?
查看>>
Node.js机制及原理理解初步
查看>>
linux CPU个数查看
查看>>
分布式应用开发相关的面试题收集
查看>>
简单理解Socket及TCP/IP、Http、Socket的区别
查看>>
利用HTTP Cache来优化网站
查看>>
利用负载均衡优化和加速HTTP应用
查看>>
消息队列设计精要
查看>>
分布式缓存负载均衡负载均衡的缓存处理:虚拟节点对一致性hash的改进
查看>>
分布式存储系统设计(1)—— 系统架构
查看>>
MySQL数据库的高可用方案总结
查看>>
常用排序算法总结(一) 比较算法总结
查看>>
SSH原理与运用
查看>>
SIGN UP BEC2
查看>>
S3C2440中对LED驱动电路的理解
查看>>
《天亮了》韩红
查看>>