hdu2489-DFS+最小生成树
题意:
给你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+最小生成树的更多相关文章
- 图的全部实现(邻接矩阵 邻接表 BFS DFS 最小生成树 最短路径等)
1 /** 2 * C: Dijkstra算法获取最短路径(邻接矩阵) 3 * 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> ...
- 【wikioi】1002 搭桥(dfs+最小生成树)
http://wikioi.com/problem/1002/ 今天开始又开始刷水了哈T_T.照着hzwer神犇的刷题记录刷!!! 题解: 一开始我也不会,但是我想到了直接爆搜T_T. 好吧,题解. ...
- 【POJ 1639】 Picnic Planning (最小k度限制生成树)
[题意] 有n个巨人要去Park聚会.巨人A和先到巨人B那里去,然后和巨人B一起去Park.B君是个土豪,他家的停车场很大,可以停很多车,但是Park的停车场是比较小.只能停k辆车.现在问你在这个限制 ...
- Code VS 1002 搭桥
题目描述 Description 有一矩形区域的城市中建筑了若干建筑物,如果某两个单元格有一个点相联系,则它们属于同一座建筑物.现在想在这些建筑物之间搭建一些桥梁,其中桥梁只能沿着矩形的方格的边沿搭建 ...
- 【牛客提高训练营5B】旅游
题目 吉老师的题时过一年还是不会做 从\(1\)号点出发经过每条边至少一次并且还要回到\(1\)号点,这跟欧拉回路的条件非常像,但是欧拉回路的实际上是"经过每一条边恰好一次并且回到出发点&q ...
- HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu2489 Minimal Ratio Tree dfs枚举组合情况+最小生成树
#include <stdio.h> #include <set> #include <string.h> #include <algorithm> u ...
- HDU 2489 Minimal Ratio Tree(dfs枚举+最小生成树)
想到枚举m个点,然后求最小生成树,ratio即为最小生成树的边权/总的点权.但是怎么枚举这m个点,实在不会.网上查了一下大牛们的解法,用dfs枚举,没想到dfs还有这么个作用. 参考链接:http:/ ...
- HDU 5723 Abandoned country (最小生成树 + dfs)
Abandoned country 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5723 Description An abandoned coun ...
- HDU 5723 Abandoned country (最小生成树+dfs)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5723 n个村庄m条双向路,从中要选一些路重建使得村庄直接或间接相连且花费最少,这个问题就是很明显的求最 ...
随机推荐
- 剑指 Offer 38. 字符串的排列 + 无重复元素的全排列
剑指 Offer 38. 字符串的排列 Offer_38 题目描述 解题思路 可以使用递归实现全排列,每次都确定一个数的位置,当所有位置的数都确定后即表示一个排列. 但是考虑到本题需要排除重复的排列, ...
- RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示
RFC2544吞吐量测试详细步骤-MiniSMB-HurricaneII软件操作演示 关键词:网络性能测试:RFC2544:吞吐量:吞吐率. RFC2544协议是RFC组织提出的用于评测网络互联设备( ...
- Java基础语法学习
Java基础语法学习 1. 注释 单行注释: //单行注释 多行注释: /*多行注释 多行注释 多行注释 多行注释 */ 2. 关键字与标识符 关键字: Java所有的组成部分都需要名字.类名.变量名 ...
- 2017算法期末复习练习赛-G Beihang Couple Pairing Comunity 2017 题解(网络流)
理解不够透彻.好题不可浪费,写题解以增进理解.会陆续补充题目.(咕咕咕) G Beihang Couple Pairing Comunity 2017 题目链接 Beihang Couple Pair ...
- string与bson.ObjectId之间格式转换
string转bson.ObjectId bson.ObjectIdHex(string) bson.ObjectId转string日后再补
- 关于github的使用学习心得
先写先介绍一下如何用github上创建一个项目吧. 用户登录后的界面如上所示.右下角是我们已经建好的库.点击其中任何一个就可以查看相应的库了.如果要新建一个项目的话,就点击Start a projec ...
- gtk编译之makefile的写法(之一)
在学习c语言GUI编程时想必大家都会遇见这样一个问题买就是每次编译都要敲`pkg-config --cflags --libs gtk+-2.0`这个烦恼吧 这是我们可以编写一个makefile文件这 ...
- 14、MyBatis教程之全部(包括所有章节)
MyBatis 3.5.5 教程 1.环境准备 jdk 8 + MySQL 5.7.19 maven-3.6.1 IDEA 学习前需要掌握: JDBC MySQL Java 基础 Maven Juni ...
- Excel模板导出之动态导出
说明 目前Magicodes.IE已支持Excel模板导出时使用JObject.Dictionary和ExpandoObject来进行动态导出,具体使用请看本篇教程. 本功能的想法.部分实现初步源于a ...
- 使用 dynamic 类型让 ASP.NET Core 实现 HATEOAS 结构的 RESTful API
上一篇写的是使用静态基类方法的实现步骤: http://www.cnblogs.com/cgzl/p/8726805.html 使用dynamic (ExpandoObject)的好处就是可以动态组 ...