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 ...
随机推荐
- 如何扩展ArcGIS中的元数据编辑器
http://www.esrichina-bj.cn/old../library/arcnews16/Metadata.htm http://www.esrichina-bj.cn/old../lib ...
- [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 ...
- Navicat for MySQL无法连接到数据库怎么办
注意端口就是3306,不要改成80之类的,访问数据库就是从这个端口过去的
- Pacemaker 安装与使用
Pacemaker 仅仅做资源管理器(CRM).底下的消息系统採用 corosync. 安装 以 ubuntu 为例, sudo aptitude install -y pacemaker coros ...
- oracle 正则查询json返回报文中某个字段的值
接口返回报文为json 格式,如下: {"body":{"businessinfo":{"c1rate":"25.00" ...
- APUE 线程 - 程序清单
APUE 线程 - 程序清单 程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; ...
- 笔记本 ThinkPad E40 安装 Mac OS X 10.9.3 Mavericks 系统
关于:自己最早接触Mac OS X系统是在一个论坛里.记得好像是2011年:那时论坛里就有人在虚拟机上执行Mac OS X 10.7系统.当时也依照论坛里的方法在虚拟机上成功装上了系统.那时開始就被苹 ...
- Django项目开发-小技巧
当你开发完一个Django项目之后肯定要吧他丢到服务器让跑起来,但是你在自己的环境下安装了好多的包,是不是在服务器中也要一个个的安装了, pip freeze > read.txt #这条命令会 ...
- MJRefresh实现刷新(使用它的Block方法)
MJRefresh实现刷新(使用它的Block方法) // // YFMVCPostListViewController.m // iOS122 // // Created by 颜风 on 15 ...
- 海思HI3516A开发板顺利上线
有图有真相.