hdu2489
来源:互联网 发布:centos回到根目录 编辑:程序博客网 时间:2024/05/29 18:02
这题用到 枚举+prim
拍了半天队,已经没报希望了,wa了好多次,结果竟然ac,看自己做没错,一些细节没处理好。
总的来讲像这种数据小的题目用枚举完全无压力,放心用。
这里注意一下对于非重排列,就是说C多少的。
#include<iostream>#include<algorithm>#include<stdlib.h>#include<string.h>#include<string>#include<vector>#include<queue>#include<list>using namespace std;typedef long long lld;typedef unsigned int ud;#define Inf INT_MAX//int最大#define Min(x,y) (x)<(y)?(x):(y)#define Max(x,y) (x)>(y)?(x):(y)#define PQ priority_queue#define Q queue#define N 20int n,m;double ans;int map[N][N];int w[N];int mark[N];int dis[N];int mern;int stack[N];int res[N];double prim(int s){ double edgeW=0; double vexW=0; for(int i=1;i<=m;i++) { dis[stack[i]]=map[stack[s]][stack[i]]; mark[stack[i]]=0; } dis[stack[s]]=0; mark[stack[s]]=1; vexW+=w[stack[s]]; int t=m-1; while(t--) { int min=Inf; int k; for(int i=1;i<=m;i++) if(!mark[stack[i]]&&dis[stack[i]]<min) { min=dis[stack[i]]; k=stack[i]; } if(min==Inf) return Inf; mark[k]=1; edgeW+=dis[k]; vexW+=w[k]; for(int i=1;i<=m;i++) if(!mark[stack[i]]&&map[k][stack[i]]<dis[stack[i]]) dis[stack[i]]=map[k][stack[i]]; } return edgeW/vexW;}void dfs(int nn){ if(nn>m) { double t=prim(1); if(t<ans) { for(int i=1;i<nn;i++) res[i]=stack[i]; ans=t; } return ; } if(stack[nn-1]+(m-nn)>n) return ; for(int i=stack[nn-1]+1;i<=n;i++) { stack[nn]=i; dfs(nn+1); }}int main(){ while(scanf("%d%d",&n,&m)&&(n||m)) { for(int i=1;i<=n;i++) scanf("%d",&w[i]); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&map[i][j]); stack[0]=0; ans=(double)Inf; dfs(1); //printf("结果:"); printf("%d",res[1]); for(int i=2;i<=m;i++) printf(" %d",res[i]); puts(""); } return 0;}
0 0
- hdu2489
- hdu2489 Minimal Ratio Tree
- HDU2489 Minimal Ratio Tree
- HDU2489-Minimal Ratio Tree
- HDU2489【状压枚举】
- hdu2489(prim+dfs)
- hdu2489之最小生成树
- hdu2489-DFS+最小生成树
- hdu2489(DFS+最小生成树)
- hdu2489 Minimal Ratio Tree dfs+最小生成树
- HDU2489 Minimal Ratio Tree 【DFS】+【最小生成树Prim】
- HDU2489 Minimal Ratio Tree 解题报告【图论】【Kruskal】【dfs】
- HDU2489--Minimal Ratio Tree(最小生成树)
- hdu2489(重要) 列举n 个数中m个数(double型间的比较不是简单的等于号就可以
- 模块化以及插件化开发个人设计思路
- jQuery.extend 函数详解
- 千行代码缺陷率的参考值
- 简明 Vim 练级攻略
- 使用AIDL实现进程间的通信
- hdu2489
- Python 实现程序的单一实例
- 老毛桃 移动硬盘做启动盘 分区
- android wifi连接可接收数据, gprs不能
- android4.3 按键消息处理分析
- 解决ListView/GridView重复getView浪费资源问题
- C printf函数中参数执行顺序
- ActiveMQ 分析系列(二)
- ucos-ii示例7:内存管理测试