Minimal Ratio Tree HDU - 2489
暴力枚举点,然后跑最小生成树得到这些点时的最小边权之和。
由于枚举的时候本来就是按照字典序的,不需要额外判。
错误原因:要求输出的结尾不能有空格。
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
bool ok[],ok2[];
bool vis[];
int num,n,m;
int a[],b[][];
vector<int> vec;
double anss;
int dis[];
void prim()
{
memset(vis,,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
int i,j,s,sum=,mina,minid,s1=;
for(s=;s<=n;s++)
if(ok[s])
break;
vis[s]=;
dis[s]=;
for(i=s+;i<=n;i++)
if(ok[i])
dis[i]=b[s][i];
for(i=;i<m;i++)
{
mina=0x3f3f3f3f;
minid=;
for(j=;j<=n;j++)
if(ok[j]&&!vis[j]&&mina>dis[j])
{
mina=dis[j];
minid=j;
}
sum+=mina;
dis[minid]=;
vis[minid]=;
for(j=;j<=n;j++)
if(ok[j]&&!vis[j]&&dis[j]>b[minid][j])
dis[j]=b[minid][j];
}
for(i=;i<=n;i++)
if(ok[i])
s1+=a[i];
double tt=(double)sum/s1;
if(tt<anss)
{
anss=tt;
memcpy(ok2,ok,sizeof(ok));
}
}
void dfs(int minn)
{
if(num>=m)
{
prim();
return;
}
for(int i=minn+;i<=n;i++)
if(!ok[i])
{
ok[i]=;
num++;
dfs(i);
ok[i]=;
num--;
}
}
int main()
{
int i,j;
scanf("%d%d",&n,&m);
while(n!=&&m!=)
{
vec.clear();
anss=;
num=;
for(i=;i<=n;i++)
scanf("%d",&a[i]);
for(i=;i<=n;i++)
for(j=;j<=n;j++)
scanf("%d",&b[i][j]);
dfs();
for(i=;i<=n;i++)
if(ok2[i])
vec.push_back(i);
for(i=;i<vec.size()-;i++)
printf("%d ",vec[i]);
printf("%d\n",vec[vec.size()-]);
scanf("%d%d",&n,&m);
}
return ;
}
Minimal Ratio Tree HDU - 2489的更多相关文章
- 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枚举+最小生成树Prim)
Minimal Ratio Tree Time Limit : 2000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) ...
- 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(暴力+最小生成树)(2008 Asia Regional Beijing)
Description For a tree, which nodes and edges are all weighted, the ratio of it is calculated accord ...
- HDU 2489 Minimal Ratio Tree(prim+DFS)
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu2489 Minimal Ratio Tree
hdu2489 Minimal Ratio Tree 题意:一个 至多 n=15 的 完全图 ,求 含有 m 个节点的树 使 边权和 除 点权和 最小 题解:枚举 m 个 点 ,然后 求 最小生成树 ...
- HDUOJ----2489 Minimal Ratio Tree
Minimal Ratio Tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 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
http://acm.hdu.edu.cn/showproblem.php?pid=2489 这道题就是n个点中选择m个点形成一个生成树使得生成树的ratio最小.暴力枚举+最小生成树. #inclu ...
随机推荐
- Eureka 简介
Eureka 简介
- [Javascript] Link to Other Objects through the JavaScript Prototype Chain
Objects have the ability to use data and methods that other objects contain, as long as it lives on ...
- Android 怎样查看系统的memory swap 资讯/信息
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- Office EXCEL 如何设置最大行高
对于单个单元格行来说,行高必须在0-409之间 但是如果合并了两个单元格,则行高就扩展了一倍,不止409,而是两倍的409.
- 汝佳大神的紫书上写错了?uva10048
算法竞赛入门经典第二版的365页例题11-5噪音.应该是"之和"换成"取最大值","取最小值"还是取最小值 假设我错了,请大家务必指点小弟 ...
- 看懂JSP声明的格式。。。
在WebRoot下新建test3.jsp 改动body内容: <%! int a = 3; %> <% int b = 3; %> <%= a-- %& ...
- 【转】TestNG中的并发(多线程)
优势 并行(多线程)技术在软件术语里被定义为软件.操作系统或者程序可以并行地执行另外一段程序中多个部分或者子组件的能力 多线程方式拥有很大的优势: 1). 减少测试运行时间 如果测试集里包含了大量的用 ...
- Linux Grub系统加密、破密、修复
一.在重新启动系统时候按任意键进入 grub界面 Grub加密 一.title前的密码 修改grub.conf 这种加密只是在用户要进入grub界面的时候提示要输入密码,但是可以正常进入系统,有没有 ...
- 《modern operating system》 chapter 6 DEADLOCKS 笔记
DEADLOCKS Both processes are blocked and will remain so forever. This situation is called a deadlock ...
- [LeetCode][Java] Roman to Integer
题目: Given a roman numeral, convert it to an integer. Input is guaranteed to be within the range from ...