#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枚举组合情况+最小生成树的更多相关文章

  1. HDU 2489 Minimal Ratio Tree (DFS枚举+最小生成树Prim)

    Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) ...

  2. HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)

    想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...

  3. hdu 2489 dfs枚举组合情况+最小生成树

    大家都说,搜索是算法的基础.今天最这题就有体会了.在n个顶点里选择m个顶点,求最小生成树.用到了深搜的回溯.所有情况都能枚举. #include<iostream> #include< ...

  4. hdu2489 Minimal Ratio Tree

    hdu2489 Minimal Ratio Tree 题意:一个 至多  n=15 的 完全图 ,求 含有 m 个节点的树 使 边权和 除 点权和 最小 题解:枚举 m 个 点 ,然后 求 最小生成树 ...

  5. HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  6. HDU 2489 Minimal Ratio Tree (dfs+Prim最小生成树)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2489 Problem Description For a tree, which nodes and ...

  7. HDU 2489 Minimal Ratio Tree 最小生成树+DFS

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  8. HDU 2489 Minimal Ratio Tree(prim+DFS)

    Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  9. 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 ...

随机推荐

  1. FastDFS的配置、部署与API使用解读(3)以流的方式上传文件的客户端代码(转)

    调用的API为: String[] upload_file( String group_name,//组名,不指定则可设为null long file_size,//文件大小,必须制定 UploadC ...

  2. 关于Android滑动冲突的解决方法(二)

    之前的一遍学习笔记主要就Android滑动冲突中,在不同方向的滑动所造成冲突进行了了解,这样的冲突非常easy理解,当然也非常easy解决.今天,就同方向的滑动所造成的冲突进行一下了解,这里就先以垂直 ...

  3. XenServer网卡Bonding

    在给XenServer配置网卡bonding时,需要在所有节点都添加到集群之后再进行,这也是来自Citrix的建议:"Citrix recommends never joining a ho ...

  4. C/C++用状态转移表联合函数指针数组实现状态机FSM

    状态机在project中使用很的频繁,有例如以下常见的三种实现方法: 1. switch-case 实现.适合简单的状态机. 2. 二维状态表state-event实现.逻辑清晰.可是矩阵通常比較稀疏 ...

  5. yum报错File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:

    原因:学python的时候,把centos7自带的python2.7改成了python3.6.2.而yum使用的是python2,所以会出现yum报错. 解决方法: 在文件/usr/bin/yum./ ...

  6. jQuery 怎么获取对象

    1.JQuery的核心的一些方法 each(callback) '就像循环 $("Element").length; ‘元素的个数,是个属性 $("Element&quo ...

  7. linux 查看权限

    参考文章:http://www.linuxidc.com/Linux/2014-10/108114.htm Linux文件访问权限分为可读,可写和可执行三种. 可用ls -l命令查看,例: ls -l ...

  8. iOS 摇一摇功能的实现

    在 UIResponder中存在这么一套方法 - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event __OSX_A ...

  9. POJ 2017 Speed Limit (直叙式的简单模拟 编程题目 动态属性很少,难度小)

                                                                                                      Sp ...

  10. ODC(Orthogonal Defect Classification)简介——正交缺陷分类法

    Defect分析是软件开发和测试中一个重要的环节,ODC介绍了一种不同于大家常用的非常有效的defect分类及分析方法.这篇文章简单的向大家介绍了什么是ODC,以及如何在项目和产品开发中使用ODC来改 ...