题意:

      给你n个点,和任意两点的距离,让你在这N个点中找到一个有m个点并且ratio最小的树.

                        ratio = sum(edge) / sum(node)

思路: N <= 15 直接DFS暴力枚举出 m个点,然后再这m个点中跑一边最小生成树,这m个点的sum(node) 可以直接加出来,而 sum(edge) 就是最小生数的值,然后求出ratio更新最小,记录答案. 


#include<stdio.h>
#include<string.h>
#include<algorithm> #define N 20
#define inf 100000000;

using namespace
std; typedef struct
{
int
a ,b ,c;
}
NODE; bool camp(NODE a ,NODE b)
{
return
a.c < b.c;
}
NODE node[N*N];
int
map[N][N] ,weight[N];
int
ans_num[N] ,now[N] ,n ,nn;
int
mer[N];
double
now_min; int finds(int x)
{
if(
x == mer[x]) return x;
return
mer[x] = finds(mer[x]);
} void
DFS(int s ,int t)
{
if(
t == n + 1)
{
int
tmp = 0 ,sum1 = 0 ,sum2 = 0 ,mm = 0;
for(int
i = 1 ;i <= n ;i ++)
{

sum1 += weight[now[i]];
for(int
j = i + 1 ;j <= n ;j ++)
{

node[++tmp].a = now[i];
node[tmp].b = now[j];
node[tmp].c = map[now[i]][now[j]];
if(
mm < now[i]) mm = now[i];
if(
mm < now[j]) mm = now[j];
}
}

sort(node + 1 ,node + tmp + 1 ,camp);
for(int
i = 1 ;i <= mm ;i ++)
mer[i] = i;
mm = 0;
for(int
i = 1 ;i <= tmp ;i ++)
{
int
x = finds(node[i].a);
int
y = finds(node[i].b);
if(
x == y) continue;
mer[x] = y;
sum2 += node[i].c;
if(++
mm == n - 1) break;
}

//printf("%d %d %d %d\n" ,sum1 ,sum2 ,now[1] ,now[2]);
double nowm = sum2 * 1.0 / sum1;
if(
nowm < now_min)
{

now_min = nowm;
for(int
i = 1 ;i <= n ;i ++)
ans_num[i] = now[i];
}
return ;
} for(int
i = s + 1 ;i <= nn ;i ++)
{

now[t] = i;
DFS(i ,t + 1);
}
} int main ()
{
int
i;
while(
scanf("%d %d" ,&nn ,&n) && n + nn)
{
for(
i = 1 ;i <= nn ;i ++)
scanf("%d" ,&weight[i]);
for(
i = 1 ;i <= nn ;i ++)
for(int
j = 1 ;j <= nn ;j ++)
scanf("%d" ,&map[i][j]);
now_min = inf;
DFS(0 ,1);
for(
i = 1 ;i < n ;i ++)
printf("%d " ,ans_num[i]);
printf("%d\n" ,ans_num[i]);
}
return
0;
}

       

hdu2489-DFS+最小生成树的更多相关文章

  1. 图的全部实现(邻接矩阵 邻接表 BFS DFS 最小生成树 最短路径等)

    1 /** 2 * C: Dijkstra算法获取最短路径(邻接矩阵) 3 * 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> ...

  2. 【wikioi】1002 搭桥(dfs+最小生成树)

    http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...

  3. 【POJ 1639】 Picnic Planning (最小k度限制生成树)

    [题意] 有n个巨人要去Park聚会.巨人A和先到巨人B那里去,然后和巨人B一起去Park.B君是个土豪,他家的停车场很大,可以停很多车,但是Park的停车场是比较小.只能停k辆车.现在问你在这个限制 ...

  4. Code VS 1002 搭桥

    题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...

  5. 【牛客提高训练营5B】旅游

    题目 吉老师的题时过一年还是不会做 从\(1\)号点出发经过每条边至少一次并且还要回到\(1\)号点,这跟欧拉回路的条件非常像,但是欧拉回路的实际上是"经过每一条边恰好一次并且回到出发点&q ...

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

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

  7. hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树

    #include <stdio.h> #include <set> #include <string.h> #include <algorithm> u ...

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

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

  9. HDU 5723 Abandoned country (最小生成树 + dfs)

    Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...

  10. HDU 5723 Abandoned country (最小生成树+dfs)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...

随机推荐

  1. nc替代ping

    linux nc介绍: 语 法:nc [-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p< ...

  2. HDOJ-3038(带权并查集)

    How many answers wrong HDOJ-3038 一个很好的博客:https://www.cnblogs.com/liyinggang/p/5327055.html #include& ...

  3. c# float类型和double类型相乘出现精度丢失

    c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...

  4. 2020年12月-第01阶段-前端基础-认识WEB

    认识WEB 1.认识网页 网页主要由文字.图像和超链接等元素构成.当然,除了这些元素,网页中还可以包含音频.视频以及Flash等. 思考: 网页是如何形成的呢? 总结 网页有图片.链接.文字等元素组成 ...

  5. 漫漫Java路1—基础知识3—数据类型和变量作用域以及常量

    强类型语言 所有变量定义后才能使用,区别于js等弱类型语言 数据类型分类 基本类型(primitive type) 引用类型(reference type) 整数类 byte:占1字节 short:占 ...

  6. The Red Button

    The Red Button 问题 问题描述 Piegirl终于发现了红色按钮,你现在还剩最后一个机会去改变这个结局.这个按钮下面的电路由n个从0到n-1编号节点组成.为了关闭这个按钮,这n个节点必须 ...

  7. 实话实说:只会.NET,会让我们一直处于鄙视链、食物链的下游

    金三银四,是个躁动的季节. 结合最近的面试,谈一谈一个老牌开发人员的面试感悟. 大家都知道我的主力技术栈是 .NET + Devops + 弱前端 (当前技术认知,不排除以后变化). 面试了大小厂,有 ...

  8. 解决springMVC https环境 jstlview redirect时变为http请求的问题

    <property name="redirectHttp10Compatible" value="false" />

  9. Python3中变量作用域nonlocal的总结

    最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑.今天趁周六休息总结记录一下. 众所周知,Python中最常见的作用域定义如下:   但是,为了更加方便地在闭包函数 ...

  10. 使用quartz.net 完成一个winform版的任务提醒工具

    这个任务提醒工具是这样的,是每日定时执行,触发时间为 小时和分钟.每天早上来就可以把当天要做的添加到datagridview中,只记录了标题和内容和时间.双击dgv就查看内容. 如果每天计划重复,也可 ...