POJ 3925 Minimal Ratio Tree(枚举+最小生成树)

2024-06-01 18:58

本文主要是介绍POJ 3925 Minimal Ratio Tree(枚举+最小生成树),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

POJ 3925 Minimal Ratio Tree

题目链接

题意:给定一些点权和一个边权矩阵,求一个最小的比例的树

思路:先枚举用哪些点,然后求最小生成树即可

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 20;int n, m, val[N], edge[N][N];int bitcount(int x) {if (x == 0) return 0;return bitcount(x>>1) + (x&1);
}struct Edge {int u, v, w;Edge() {}Edge(int u, int v, int w) {this->u = u;this->v = v;this->w = w;}
} e[N * N];int en;bool cmp(Edge a, Edge b) {return a.w < b.w;
}int parent[N];int find(int x) {return x == parent[x] ? x : parent[x] = find(parent[x]);
}int cal() {sort(e, e + en, cmp);for (int i = 0; i < n; i++) parent[i] = i;int tot = n;int ans = 0;for (int i = 0; i < en; i++) {int pu = find(e[i].u);int pv = find(e[i].v);if (pu != pv) {parent[pu] = pv;ans += e[i].w;tot--;}if (tot == 1) break;}return ans;
}int main() {while (~scanf("%d%d", &n, &m) && n || m) {for (int i = 0; i < n; i++) scanf("%d", &val[i]);for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)scanf("%d", &edge[i][j]);int maxs = (1<<n);int anss;double ans = 1e15;for (int i = 1; i < maxs; i++) {if (bitcount(i) != m) continue;int sumnode = 0;en = 0;for (int u = 0; u < n; u++) {if (i&(1<<u)) {sumnode += val[u];for (int v = 0; v < n; v++) {if (edge[u][v] == 0) continue;if (i&(1<<v)) e[en++] = Edge(u, v, edge[u][v]);}}}double tmp = cal() * 1.0 / sumnode;if (ans > tmp) {ans = tmp;anss = i;}}int bo = 0;for (int i = 0; i < n; i++) {if (anss&(1<<i)) {if (bo) printf(" ");else bo = 1;printf("%d", i + 1);}}printf("\n");}return 0;
}


这篇关于POJ 3925 Minimal Ratio Tree(枚举+最小生成树)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1021842

相关文章

【服务器运维】CentOS6 minimal 离线安装MySQL5.7

1.准备安装包(版本因人而异,所以下面的命令中版本省略,实际操作中用Tab自动补全就好了) cloog-ppl-0.15.7-1.2.el6.x86_64.rpmcpp-4.4.7-23.el6.x86_64.rpmgcc-4.4.7-23.el6.x86_64.rpmgcc-c++-4.4.7-23.el6.x86_64.rpmglibc-2.12-1.212.el6.x86_64.r

【服务器运维】CentOS7 minimal 离线安装 gcc perl vmware-tools

0. 本机在有网的情况下,下载CentOS镜像 https://www.centos.org/download/ 1. 取出rpm 有的情况可能不需要net-tools,但是如果出现跟ifconfig相关的错误,就把它安装上。另外如果不想升级内核版本的话,就找对应内核版本的rpm版本安装 perl-Time-Local-1.2300-2.el7.noarch.rpmperl-Tim

android 带与不带logo的二维码生成

该代码基于ZXing项目,这个网上能下载得到。 定义的控件以及属性: public static final int SCAN_CODE = 1;private ImageView iv;private EditText et;private Button qr_btn,add_logo;private Bitmap logo,bitmap,bmp; //logo图标private st

LeetCode--155 最小栈

题目 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) -- 将元素 x 推入栈中。pop() -- 删除栈顶的元素。top() -- 获取栈顶元素。getMin() -- 检索栈中的最小元素。 示例 MinStack minStack = new MinStack();minStack.push(-2);minStack.push

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

FastAdmin/bootstrapTable 表格中生成的按钮设置成文字

公司有个系统后台框架用的是FastAdmin,后台表格的操作栏按钮只有图标,想要设置成文字。 查资料后发现其实很简单,主需要新增“text”属性即可,如下 buttons: [{name: 'acceptcompany',title: '复核企业',text:'复核企业',classname: 'btn btn-xs btn-primary btn-dialog',icon: 'fa fa-pe

PHP生成csv格式Excel,秒级别实现excel导出功能

防止报超内存,兼容中文,兼容科学技术法。 爽。。。。很爽。。。。 /*** 告诉浏览器下载csv文件* @param string $filename*/public static function downloadCsv($data, $filename, $encoding = 'utf-8'){header("Content-type: text/csv");header("Conten

PHP 读取或生成大的Excel

场景,在很多情况下,需要读取Excel文件。 常用的有PHPExcel包或者使用 maatwebsite/excel 包 但是使用这个包读取或生成excel,如果excel文件过大,很容易出现超内存情况。 解决方法: 上传:要求上传者使用.csv 文件上传。然后使用php自带的 fgetcsv()函数来读取文件。http://php.net/manual/zh/function.fgetc

3D模型相关生成

3D模型相关生成 1. DreamFusion Model DreamFusion Model 是一种将文本描述转化为三维模型的技术。你可以想象它是一个“魔法翻译器”,你告诉它一个场景或物体的描述,比如“一个飞翔的龙”,它就能生成一个相应的 3D 模型。 原理: 文本到图像生成:DreamFusion 首先将文本描述转化为一系列可能的 2D 图像。这部分利用了预训练的扩散模型(如 DALL

Java代理-动态字节码生成代理的5种方式

上篇讲到了代理模式出现的原因,实现方式以及跟其他相似设计模式的区别。传送门@_@ http://blog.csdn.net/wonking666/article/details/79497547 1.静态代理的不足 设计模式里面的代理模式,代理类是需要手动去写的。但是手写代理的问题颇多 1.如果不同类型的目标对象需要执行同样一套代理的逻辑,比如说在方法调用前后打印参数和结果,那么仍然需要为每