博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU4756+Prim
阅读量:6990 次
发布时间:2019-06-27

本文共 1191 字,大约阅读时间需要 3 分钟。

题意简单:去掉最小生成树的某一条边并补上一条,求MaxVal

思路:贪心(借鉴Yamidie的思路。。。)

分别求出最小生成树和次最小生成树,再在这两棵树上求最小生成树

#include
#include
#include
#include
#include
using namespace std;const int maxn = 1015;const int maxm = maxn*maxn;const int inf1 = 0x3f3f3f3f;const double inf2 = 9999999999;struct Point { double x,y;}pnt[ maxn ];struct Edge{ int u,v; double val; int id;}edge[ maxn<<1 ];int cnt_edge;double mat[ maxn ][ maxn ];double dis[ maxn ];bool vis[ maxn ];int pre[ maxn ];double LenPrim1;double LenPrim2;int fa[ maxn ],rank[ maxn ];int find( int x ){ if( x==fa[x] ) return x; else return fa[ x ] = find( fa[x] );}void init( int n ){ for( int i=0;i
dis[j] ){ M = dis[j]; id = j; } } if( id==-1 ) break; vis[ id ] = true; ans += M; edge[ cnt_edge ].u = pre[ id ]; edge[ cnt_edge ].v = id; edge[ cnt_edge ].id = Belong; edge[ cnt_edge ].val = mat[ id ][ pre[id] ]; //printf("u = %d,v = %d\n",edge[cnt_edge].u,edge[cnt_edge].v); cnt_edge ++ ; for( int j=0;j
mat[id][j] ){ dis[j] = mat[id][j]; pre[ j ] = id; } } } return ans;} void Deal( int n ){ for( int i=0;i
ans ) ans = temp_ans; } } printf("%.2lf\n",ans*k); } return 0;}

 

 

转载地址:http://zkzvl.baihongyu.com/

你可能感兴趣的文章
文字在div中水平和垂直居中的的css样式
查看>>
cocos creator protobuf实践
查看>>
精品素材:推荐15套非常漂亮的 iOS 图标素材
查看>>
使用HttpSessionListener接口监听Session的创建和失效
查看>>
android 国际化
查看>>
10000单词积累,从今天开始(待续)。。。
查看>>
转Spring+Hibernate+EHcache配置(三)
查看>>
使用现有ECC数据库进行安装或者恢复系统
查看>>
发布我的高性能纯C#图像处理基本类,顺便也挑战一下极限。:)
查看>>
在Ubuntu上单机安装Hadoop
查看>>
安装SharePoint2010出现“Could not find stored procedure ‘sp_dboption’.”的解决方法
查看>>
存储过程中执行动态Sql语句
查看>>
SQL Server里简单参数化的痛苦
查看>>
《逻辑与计算机设计基础(原书第5版)》——1.9 习题
查看>>
停止去人性化吧 SOC应找回人的元素
查看>>
数据中心托管节约企业成本
查看>>
Spark大数据处理系列之Machine Learning
查看>>
被 281 亿个传感器包围时,我们如何重新定义生活?
查看>>
openSUSE 11.2 安装飞鸽传书 g2ipmsg
查看>>
用大数据做产业组织 用“互联网+”做产业服务
查看>>