hdu 4756 Install Air Conditioning(MST+全边次小树,4级)

华为防火墙USG6600全流量日志配置指南:从流量监控到NAT日志的完整方案 本文详细介绍了华为USG6600防火墙全流量日志配置方案,涵盖流量监控、NAT日志及安全事件溯源等核心功能。通过精细化配置和性能优化技巧,帮助企业构建高效、合规的日志体系,提升网络安全运维效率。文章特别强调了日志采样与字段过滤的实用方法,适用于高流量环境下的资源优化。 阅读详情

Install Air Conditioning

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 174    Accepted Submission(s): 23


Problem Description

  NJUST carries on the tradition of HaJunGong. NJUST, who keeps up the ”people-oriented, harmonious development” of the educational philosophy and develops the ”unity, dedication, truth-seeking, innovation” school motto, has now become an engineering-based, multidisciplinary university.

  As we all know, Nanjing is one of the four hottest cities in China. Students in NJUST find it hard to fall asleep during hot summer every year. They will never, however, suffer from that hot this year, which makes them really excited. NJUST’s 60th birthday is approaching, in the meantime, 50 million is spent to install air conditioning among students dormitories. Due to NJUST’s long history, the old circuits are not capable to carry heavy load, so it is necessary to set new high-load wires. To reduce cost, every wire between two dormitory is considered a segment. Now, known about all the location of dormitories and a power plant, and the cost of high-load wire per meter, Tom200 wants to know in advance, under the premise of all dormitories being able to supply electricity, the minimum cost be spent on high-load wires. And this is the minimum strategy. But Tom200 is informed that there are so many wires between two specific dormitories that we cannot set a new high-load wire between these two, otherwise it may have potential risks. The problem is that Tom200 doesn’t know exactly which two dormitories until the setting process is started. So according to the minimum strategy described above, how much cost at most you'll spend?
 

Input
  The first line of the input contains a single integer T(T ≤ 100), the number of test cases.
  For each case, the first line contains two integers n(3 ≤ n ≤ 1000), k(1 ≤ k ≤ 100). n represents n-1 dormitories and one power plant, k represents the cost of high-load wire per meter. n lines followed contains two integers x, y(0 ≤ x, y ≤ 10000000), representing the location of dormitory or power plant. Assume no two locations are the same, and no three locations are on a straight line. The first one is always the location of the power plant.
 

Output
  For each case, output the cost, correct to two decimal places.
 

Sample Input
  
2 4 2 0 0 1 1 2 0 3 1 4 3 0 0 1 1 1 0 0 1
 

Sample Output
  
9.66 9.00
 

Source
 

Recommend
liuyiding
 
思路:先用prim求出最小树,并记录最小树的所有边,标记。
          然后,枚举所有最小树边的最小替代边,最后的答案就是MAX(MST-最小树边+最小替代边)

#include<iostream>
#include<cstring>
#include<cstdio>
#include<vector>
#include<cmath>
#define FOR(i,a,b) for(int i=a;i<=b;++i)
#define clr(f,z) memset(f,z,sizeof(f))
using namespace std;
const int mm=1000+9;
const double oo=1e30;
double g[mm][mm];
vector<int>ge[mm];
class Point
{
  public:double x,y;
}f[mm];
double dis[mm],ci[mm][mm],mark[mm];
int fa[mm];
int cas;
bool vis[mm],isMST[mm][mm];
int N,K;
double DFS(int u,int rt)///
{ //puts("++");
  double _min=mark[u];
  for(int i=0;i<ge[u].size();++i)
  {
    int v=ge[u][i];
    if(v==rt)continue;
    _min=min(_min,DFS(v,u));
  }
  if(rt!=-1)
  {
    ci[rt][u]=ci[u][rt]=min(_min,ci[rt][u]);
  }
  return _min;
}
double get_Dis(int i,int j)
{
  return sqrt((f[i].x-f[j].x)*(f[i].x-f[j].x)+(f[i].y-f[j].y)*(f[i].y-f[j].y));
}
int main()
{
  while(~scanf("%d",&cas))
  {
    while(cas--)
    {
      scanf("%d%d",&N,&K);
      FOR(i,1,N)
      {
        scanf("%lf%lf",&f[i].x,&f[i].y);
      }
      FOR(i,1,N)FOR(j,i+1,N)
      g[i][j]=g[j][i]=get_Dis(i,j);
      ///prim
      FOR(i,0,N)dis[i]=oo;
      clr(vis,0);
      vis[1]=1; dis[1]=0;fa[1]=1;
      FOR(i,2,N)dis[i]=g[1][i],fa[i]=1;
      int best;double MAX,MST=0;

      FOR(i,2,N)
      {
        best=-1;MAX=oo;
        FOR(j,1,N)
        if(!vis[j]&&MAX>dis[j])
          best=j,MAX=dis[j];
         // if(best==-1)break;
        vis[best]=1;MST+=MAX;
        FOR(j,1,N)
        {
          if(!vis[j]&&g[best][j]<dis[j])
            dis[j]=g[best][j],fa[j]=best;
        }
      }
      /*****************/
      FOR(i,1,N)FOR(j,1,N)
      isMST[i][j]=0,ci[i][j]=oo;
      FOR(i,2,N)isMST[i][ fa[i] ]=isMST[ fa[i] ][i]=1;
      FOR(i,1,N)ge[i].clear();
      FOR(i,2,N)ge[ fa[i] ].push_back(i),ge[i].push_back(fa[i]);
      FOR(i,1,N)
      {
        FOR(j,1,N)
        if(i!=j&&!isMST[i][j])
        {
         mark[j]=g[i][j];
        }
        else mark[j]=oo;
        DFS(i,-1);
      }
      double ans=MST;
      FOR(i,1,N)
      if(fa[i]!=1)///发电与宿舍之间一定能连
      {
        ans=max(ans,MST-g[ fa[i] ][i]+ci[ fa[i] ][i]);
        //cout<<g[ fa[i] ][i]<<" "<<ci[ fa[i] ][i]<<" "<<fa[i]<<" "<<i<<endl;
      }
      cout<<ans*K<<endl;
      printf("%.2lf\n",ans*K);
    }
  }
}


关于STM32编译报错:Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 今天新建工程发现出现一个错误 —— …\Output\CG.axf: Error: L6218E: Undefined symbol SystemInit (referred from startup_stm32f10x_md.o). 但我觉得我的操作没有任何问题,而且配置和上一个文件比较是一模一样的。 于是我开始百度查询,然后发现了下面几个博客—— @weixin_44133391——STM32 编译错误 @dorlolok——iel5 编译报错 error: L6235E: More than one 阅读详情

相关推荐

手把手教你搞定EMC EFT测试:从电源线到信号线的完整整改实战(附常见失败原因)

本文详细解析了EMC EFT测试中的常见问题及整改措施,从电源线到信号线的完整实战方案。通过四步定位法和成本最优整改策略,帮助工程师有效应对电快速脉冲群干扰,提升产品通过率并降低成本。

weixin_30920597的博客 498

HDU4756(次小生成树)

其中:枚举每条不在最小生成树上的边,并把这条边放到最小生成树上面,然后就一定形成环,那么我们将这条环中取出最长的一条路(当然除了新加入的那条边外)。最终我们得到的权值便是最小生成树的权值。 Max[i][j]表示的最小生成树中的点i到点j之间的最长距离。Max[u][j]=max(Max[j][p[u]],dist[u]) 方法一不知道为什么WA,如果有大佬能看出问题,望指教。 方法一:Prim() #include<iostream> #include<algorithm> #in

Keep_Trying_Go的博客 398

Verilog语法之十:过程块(initial和always)

我将Verilog的语法进行了总结,写了13篇文章,让小白“快速见识猪如何跑”,每一篇讲解一类语法,结合正确的示例代码和错误的示例代码,有的章节对个别语法进行了归纳总结,帮助初学者加深理解。

航天领域资深码农,型号经验丰富,一线干货分享 1671

hdu4756(最小生成树最佳替换边)

链接:点击打开链接 题意:给出n个点要求依次删除最小生成树上的边后,求出每次删边后的最小生成树的最大值 代码:#include #include #include #include #include #include using namespace std; const int INF=0x3f3f3f3f; int son[1005],dfs_sort[1005],dfs_num

stay_accept的专栏 1315

qt5.14.2+vs2019配置msvc2017编译器

qt5.14.2+vs2019配置msvc2017编译器 在使用qt编译程序时此前一直使用的是自带的MinGW 32-bit和64-bit,现在想使用msvc编译器。本次使用的是qt5.14.2,vs2019,需要配置msvc2017的32-bit和64-bit编译器。 1、首先安装好qt5.14.2和vs2019,其次在visual studio installer选择修改,然后选择msvc2017对应的组件,本次安装的是这两个 2、打开qt creator的工具–选项–kits–编译器,选择Manu

bangtanhui的博客 1万+

YOLOv11火焰识别:从环境搭建到GUI部署的完整工程实践

目标检测是计算机视觉的核心任务之一,它通过定位和分类图像中的物体,为机器赋予“看懂”世界的能力。其原理通常基于深度学习模型,如YOLO系列,通过卷积神经网络提取特征并预测边界框与类别。这项技术的价值在于将算法能力转化为实际生产力,广泛应用于安防监控、工业质检、自动驾驶等场景。在工程实践中,环境配置的稳定性与数据质量往往决定项目成败,而模型部署的易用性直接影响最终用户体验。本文以火焰识别这一具体应用为切入点,详细解析了如何利用YOLOv11完成从零到产品化的全链路流程,其中涉及Conda虚拟环境管理、PyTo

weixin_29483277的博客 234

HDU 4756 次小生成树

题意:给你n(n = 1000)个二维点,第一个点是power plant,还有n - 1个点是dormitories。然后现在知道有一条寝室到寝室的边是不能连的,但是我们不知道是哪条边,问这种情况下,最小生成树的最大值。 思路:有一种很朴素的算法就是枚举每一条被删除的边,然后做最小生成树,复杂度高的突破天际,显然不可以。 但是既然想到了上面的那种做法,再想一下就可以得到,我们还是枚举每一条被

just_water 2426

Wider Face+YOLOV7人脸检测

使用Wider Face数据集训练YOLOV7

chen_znn的博客 8406

HDU 4126 and HDU 4756 【求最小生成树的最佳替换边】经典题

HDU - 4126 和 HDU - 4756 基本是一样的题, 前面是后面那道的简化版 这两道题主要涉及的一个问题就是, 每次替换掉图中的一条边, 问此时图的最小生成树是多少.. 很明显有个暴力的方法, 但是这样时间爆炸, 我们可以这样想, 先求一次图的最小生成树, 如果替换的边不是树边, 那么此时的图的MST依旧不会变, 如果是树边, 很明显, 我们需要在原图中找一条不是树边, 并且尽量...

Anxdada -- 我等风来也等你 792

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

SAP S/4 FICO科目辅助余额表开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

我好像病了的博客 329

VTK在QT与非QT环境下使用的区别

VTK可以在QT框架内使用,也可以独立于QT使用,这两种使用方式在架构、交互和渲染方面有显著差异。

深之JohnChen的专栏 629

hdu 4756 & hdu 4126 & hdu 4081

hdu 4756是南京网赛的题,这题和2011年福州现场赛的一道题,也就是hdu4126很像,比赛前十几天明明做过的说,结果比赛的时候没看到这题,唉。今天一不小心又翻到了一个和这两题也很像的题——hdu 4081,还是2011北京现场赛的题,晕了,既然这样就直接都放在一起算了。           这三个题思路都差不多,问题都是先要求一个最小生成树,然后删掉一条边,询问剩下的最小生成树的情况(

绝望的乐园 1303

内模控制(IMC)——理论、应用与实践

内模控制方法的核心思想是利用被控对象的数学模型(即内模)构建控制器,使得控制器可以“预知”被控系统的动态响应,从而在控制输入中提前补偿模型的固有特性和扰动影响。常见的内模控制结构中,将系统分为无延迟部分和扰动部分,并利用内部模型预测输出值,再通过反馈回路进行误差修正。utuimctufbtutui​mctuf​bt其中,uimctu_imc(t)ui​mct为内模预测得到的预补偿控制量,ufbtu_fb(t)uf​bt。

闲人编程的博客 2632

HDU 4756 树形DP + prim

树形DP + prim题意:​ 有n个寝室,现在准备安装空调,但是线路比较老化,需要安装新的线路,每米的线路花费为m,给出n个寝的坐标,求出需要的最小花费,但是现在有一个问题,就是求出的最短的路径和其中有一条是不可以用的,但是也不知道是哪一条,但是与第一个寝室相连的路径可以用,为了确保安装进行至少需要多少钱?:思路:​ 转化一下问题,求出最小生成树之后,除了与第一个节点相连接的路径,其它都有

Since_natural_ran 436

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

HDU 4756 && HDU 4126

两个题次小生成树的扩展题。 先prim求出最小生成树,枚举删除每条树边后求分割成的两部分之间的最小连接费用,这一步用一个O(n^2)的n遍dfs求解。 不过HDU 4756这个题我被sqrt函数卡死,之前的写法HDU被卡爆栈,給sqrt传负数爆栈 //double tmp=(double)(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j]); dis[i][j]=dis[j][i]=sqrt(tmp);

1292765944的专栏 1879

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

HDU 4756:Install Air Conditioning (最小生成树最佳替换边,最小生成树+树形dp)

题目翻译: 由于给每个寝室都装了空调,所以要从电站(编号为1)往那些寝室送电。 所以要铺设线路,线路每米的花费为K。给出N个点,的坐标,第一个点 总代表电站的位置,剩余N-1个点是寝室的位置,欲想让费用最小,我们 肯定是求该图的最小生成树,但是由于构成最小生成树的边可能出故障, (与1相连的边不会出故障,因为1是电站,是唯一供电的地方,) 则该图就被分为S,T两个集合,追条删除构成最小

温姑娘的博客 601

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【算法精讲】次小生成树 配套例题(HDU 4081 POJ 1679)

概述 最小生成树算法, 即在一个有N个点的有权无向图中选中N-1条边, 使得各个顶点直接相互连通且权值和最小, 这样的一个算法称为最小生成树算法(MST), 通过经典的Prim或Kruskal算法都可以有效求解 可在此问题的基础之上, 如果我们要求求出次小生成树, 或第k小生成树, 这样的算法又该如何实现呢 ? 算法思想 次小生成树算法是建立在最小生成树算法之上的, 首先我们求出最小生成树, 接下...

Suprit's blog 1031

次小生成树讲解+模板+例题(POJ-1679)

前置技能: 最小生成树kruskal算法 次小生成树: 定义: 设 G=(V,E,w)是连通的无向图,T 是图G 的一个最小生成树。如果有另一棵树T1,满足不存在树T’,ω(T’)&lt;ω(T1) ,则称T1是图G的次小生成树。 说白了也就是只比最小生成树大的一颗生成树。 算法(这里就不在去说那些定理了~,直接说对算法的理解): 怎么去找到一颗次小生成树呢?首先很容易想到的就是,每...

QDU_ZXF的博客 4323

次小生成树个人理解 prime和kruskal两种算法+PTA例题

看网上关于次小生成树的时候一直有点不理解max[i][j]数组的用处,直到自己通过画图才得以理解。 首先讲讲如何求次小生成树,也就是最小生成树之外的最优解。大概的方法就是从未使用的边中(没有被最小生成树包括的边)选一条加入最小生成树,那么肯定会形成一个环了,然后从环中减去最大的一条边即可。而这时候max数组的作用就体现出来了,max[i][j]保存的是从i到j的路径中最长的那一小段路径长度,那么在构成环的时候减去环中除了新边外最大的一条边的时候就很方便了。然后只要遍历所有未使用的边,重复以上步骤,找到最小的

Shanhj的博客 490

次小生成树问题——秘密的牛奶运输

题目描述 算法 本题是一个裸的严格次小生成树问题。所谓严格就是该次小生成树的总边权严格大于最小生成树(以下用MGT称呼)。非严格的就是边权和MGT相同 算法1: 自然的想先求MGT,再每次删去MGT中的一条边,在该图上做MGT求解(新图的MGT就是原图的次小生成树)。做一遍kruskal后面就不用再排序了,删边次数n - 1,每次求MGT是m,故 O(mlogm+nm)O(mlogm + nm)O(mlogm+nm)。 这种方法求不出 严格次小生成树,因为如果有非严格次小生成树,删边之后再找肯定会找到非

AKAPinkman的博客 763

次小生成树题目及思路 poj1679

下面只是讲讲我对次小生成树一些理解,推荐先去看一下次小生成树的一些概念再来看这篇博客。 首先我们要明确一点,在最小生成树中,任意两个点之间有且仅有一条路径。然后是次小生成树由何而来,必然是最小生成树转变而来。如何转变,应该是将一条不是最小生成树中的边,替换最小生成树的一条边,且替换后任意节点之间还应该有通路。那么思路就来了。由于最小生成树的特点,因此往树中添加一条边,就必然会形成一个环,那么去掉...

yiqzq的博客 619

次小生成树模板 poj 1679

最小生成树和次小生成树定义: 生成树:图G的生成树包含原图中的全部顶点n,和n-1条边. 最小生成树就是所有生成树中边权和最小的. 2 那么如何求最小生成树呢? 介绍两种基于贪心的算法: 1.prim算法     设图G =(V,E),其生成树的顶点集合为U。   ①、把v0放入U。   ②、在所有u∈U,v∈V-U的边(u,v)∈E中找一条最小权值的边,加入生成树。

Harder 386

hdu4756 最小树+树形dp

题意:       给你一个完全图,让你在上面找到一颗最小树,然后问破坏这个最小树的某一条边后用其他边连接(要求最小)成新的树,然后输出破坏每一条边后最小树中最大的那个. 思路:       先跑出一颗最小树,然后枚举树上的每一条边,当这条边被删除的时候,生成树就被分成了两个集合,然后找到一条最小的能让两个集合相通的替代边,最后输出最大的那个(树形dp优化),下面是我的ac记录

天使也掉毛 1255

HDU 4756 Install Air Conditioning(树形dp+MST)

题目链接: HDU 4756 Install Air Conditioning 题意: 给nn个点的二维坐标,要将这nn个点连通,边权就是两点距离,其中00号节点是根,可能会破坏除根之外的任意两点的边(不能建边),要求将这nn个点连通的最坏代价? 数据范围:n≤1000n\leq 1000 分析: 上面的黑体字是因为原题中有这句话: But Tom200 is informe

ramay7 651

次小生成树【模板】

给一个图,判断图的最小生成树是否唯一。 End[]记录邻接表尾节点的位置。MST表示最小生成树的大小,SecMST表示次小生成树的大小。#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; const int MAXN = 1010; const int MAXM

程序员充电站(itcharge) 1576

次小生成树模板

ural 1416 求最小生成树和次小生成树 #include using namespace std; #define inf 0x3f3f3f3f #define PI acos(-1.0) typedef long long ll; const int maxn=505; int mp[maxn][maxn],cost[maxn],n,m,pre[maxn],maxe[maxn][ma

unbelievable_的博客 232
上一篇: hdu 4750 Count The Pairs(最小生成树的应用,4级)
下一篇: hdu 4758 Walk Through Squares(AC自动机+DP,4级)
剑不飞
博客等级 码龄15年 86粉丝 505原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值