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 ...
随机推荐
- 【Todo】秒杀系统 & 乐观锁 & Nginx反向代理
http://www.csdn.net/article/2014-11-28/2822858 1. 单点帐号验证,不用读,而是用写入,Redis,看是否加watch 2. 抢宝的最终购买冲突.包装称“ ...
- atomic原子操作
C++中对共享数据的存取在并发条件下可能会引起data race的未定义行为,需要限制并发程序以某种特定的顺序执行,有两种方式:1.使用mutex保护共享数据: 2.原子操作 原子操作:针对原子类型操 ...
- Jenkins系列之-—03 修改Jenkins用户的密码
一.Jenkins修改用户密码 Jenkins用户的数据存放在JENKINS_HOME/users目录. 1. 打开忘记密码的用户文件夹,里面就一个文件config.xml.打开并找到<pass ...
- 输入年份,然后打印出该年的万年历,以及标识出当天日期。相似于linux下的cal -y结果。
public class Permanent { public static boolean isLeapYear(int year){//能被4整除但不能被100整除.或者能被400整除 boole ...
- 【CSS3动画实战】Mailman Icon
周末闲来无事,就想着做点东西练练手.又苦于自己 PS 水平太差,设计不出什么好看的东西. 干脆就在 Dribbble 上逛一逛,看看有什么看起来比较屌的,实际上却很简单的东西. 一共做了 3 个,均已 ...
- pip 安装速度慢解决办法
https://blog.csdn.net/liujingclan/article/details/50176597 https://blog.csdn.net/rytyy/article/detai ...
- angularjs学习之六(angularjs中directive指令的一般编程事件绑定 模板使用等)
angular js 中模板的使用.事件绑定以及指令与指令之间的交互 相应教学视频地址(需FQ):v=aG8VD0KvUw4">angularjs教学视频 <!doctype h ...
- MD5加密解密帮助类
using System; using System.Security.Cryptography; using System.Text; namespace Maticsoft.DBUtility { ...
- mysql连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link
jdbc驱动:mysql-connector-java-5.1.39-bin.jar 这个有问题, 换成:mysql-connector-java-5.1.34.jar 就可以了
- YTU 2960: 改错题--小鼠标,你要干什吗?
2960: 改错题--小鼠标,你要干什吗? 时间限制: 1 Sec 内存限制: 128 MB 提交: 118 解决: 62 题目描述 鼠标双击不同的图标产生不同的效果,比如双击文档(documen ...