hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树
- #include <stdio.h>
- #include <set>
- #include <string.h>
- #include <algorithm>
- using namespace std;
- const int maxn = ;
- const int inf = ;
- double minans;
- int vis[maxn];//记录选中的点
- int mp[maxn][maxn], ans[maxn][maxn];
- int min_road[maxn];
- int Prim(int n)
- {
- int i, j, min_i, minm, sum = ;
- int dis[maxn];
- int vis[maxn];
- for (i = ; i <= n; i++)
- dis[i] = ans[i][];
- memset(vis, false, sizeof vis);
- vis[] = true;
- for (i = ; i<n; i++)
- {
- minm = inf, min_i = i;
- for (j = ; j <= n; j++)
- {
- if (vis[j] == false && dis[j]<minm)
- {
- minm = dis[j];
- min_i = j;
- }
- }
- if (minm == inf)
- break;
- sum += minm;
- vis[min_i] = true;
- for (j = ; j <= n; j++)
- {
- if (vis[j] == && dis[j]>ans[min_i][j])
- dis[j] = ans[min_i][j];
- }
- }
- return sum;
- }
- int ok(int n)
- {
- memset(vis, , sizeof vis);
- int cnt = ;
- int m = n, cont = ;
- while (m)
- {
- if (m % )
- vis[cont++] = cnt;
- cnt++;
- m /= ;
- }
- return cont;
- }
- int main()
- {
- int d[maxn], maxm;
- int n, i, j, k, cnt, m;
- while (scanf("%d%d", &n, &m) != EOF)
- {
- if (n == && m == )
- break;
- maxm = ;
- for (i = ; i <= n; i++)
- maxm *= ;
- for (i = ; i <= n; i++)
- scanf("%d", &d[i]);
- for (i = ; i <= n; i++)
- {
- for (j = ; j <= n; j++)
- {
- scanf("%d", &mp[i][j]);
- }
- }
- minans = 9999999999.0;
- int sum_point;
- for (i = ; i < maxm; i++)
- {
- if (ok(i) == m + )
- {
- sum_point = ;
- for (j = ; j <= m; j++)
- {
- sum_point += d[vis[j]];//选的点
- for (k = j + ; k <= m; k++)
- {
- ans[j][k] = ans[k][j] = mp[vis[j]][vis[k]];
- }
- }
- int sum = Prim(m);
- if ((sum*1.0 / sum_point) < minans)
- {
- minans = sum*1.0 / sum_point;
- for (i = ; i <= m; i++)
- min_road[i] = vis[i];
- }
- }
- }
- for (i = ; i <= m - ; i++)
- printf("%d ", min_road[i]);
- printf("%d\n", min_road[i]);
- }
- return ;
- }
hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树的更多相关文章
- HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)
Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
- hdu 2489 dfs枚举组合情况+最小生成树
大家都说,搜索是算法的基础.今天最这题就有体会了.在n个顶点里选择m个顶点,求最小生成树.用到了深搜的回溯.所有情况都能枚举. #include<iostream> #include< ...
- hdu2489 Minimal Ratio Tree
hdu2489 Minimal Ratio Tree 题意:一个 至多 n=15 的 完全图 ,求 含有 m 个节点的树 使 边权和 除 点权和 最小 题解:枚举 m 个 点 ,然后 求 最小生成树 ...
- HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...
- HDU 2489 Minimal Ratio Tree 最小生成树+DFS
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2489 Minimal Ratio Tree(prim+DFS)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 2489 Minimal Ratio Tree(暴力+最小生成树)(2008 Asia Regional Beijing)
Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated accord ...
随机推荐
- 服务器----1U、2U、3U、4U
U是一种表示服务器外部尺寸的单位,是unit的缩略语,详细的尺寸由作为业界团体的美国电子工业协会(EIA)所决定. 之所以要规定服务器的尺寸,是为了使服务器保持适当的尺寸以便放在铁质或铝质的机架上.机 ...
- v-bind指令
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 正则表达式pattern的匹配格式
0> 匹配 -------------------------------------------------------------------------------- (pattern) ...
- 通俗易懂EJB
摘自:http://blog.csdn.net/jojo52013145/article/details/5783677 1. 我们不禁要问,什么是"服务集群"?什么是" ...
- Latex 5: LaTeX资料下载
转: LaTeX资料下载 最全latex资料下载 LaTeX命令速查手册1
- SimpleAdapter ArrayAdapter用法
listView = (ListView) findViewById(R.id.list_main); /* String[] strings = {"A","A&quo ...
- spring cloud config 属性加解密
首先需要(Java Cryptography Extension (JCE))的支持,下载路径: https://www.oracle.com/technetwork/java/javase/down ...
- 默认安装centos7 网卡没有启动的问题
CentOS最小化安装的时候,先把net-tools安装上(先把网卡配置好再安装.) #yum install net-tools 登录操作系统 用户名root 密码 123456 输入ip查询命令 ...
- (linux)mmccard驱动的读写过程解析
mmc io的读写从mmc_queue_thread()的获取queue里面的request开始. 先列出调用栈,看下大概的调用顺序, 下面的内容主要阐述这些函数如何工作. host->op ...
- (C)理解#define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b))
理解 #define write(b,addr) (void)((*(volatile unsigned int *) (addr)) = (b)) 嵌入式系统编程,要求程序员能够利用C语言访问固 ...