当前位置: 首页 > 编程日记 > 正文

LA 5717枚举+最小生成树回路性质

  1 /*LA 5717
  2 《训练指南》P343
  3 最小生成树的回路性质
  4 在生成的最小生成树上,新增一条边e(u,v)
  5 若原图上u到v的路径的最大边大于e,则删除此边,加上e,否则不变。
  6 
  7 若原图上u到v的路径的最大边的产生:BFS/DFS都可 ,nm的复杂度,从每个点出发,找到每条边,更新最大即可
  8 */
  9 
 10 #include<iostream>
 11 #include<string.h>
 12 #include<stdio.h>
 13 #include<stdlib.h>
 14 #include<cmath>
 15 #include<algorithm>
 16 #include<queue>
 17 #include<stack>
 18 #include<set>
 19 #include<map>
 20 #define LL unsigned long long
 21 #define maxn 1010
 22 #define INF 99999
 23 using namespace std;
 24 
 25 double X[maxn];
 26 double Y[maxn];
 27 int Peo[maxn];
 28 int p[maxn];
 29 double L;//最小生成树总长度
 30 double MaxDis[maxn][maxn];
 31 int n,cnt;
 32 
 33 double nextnum()
 34 {
 35     double x;
 36     scanf("%lf",&x);
 37     return x;
 38 }
 39 int nextint()
 40 {
 41     int x;
 42     scanf("%d",&x);
 43     return x;
 44 }
 45 
 46 struct Edge
 47 {
 48     double u,v,dis;
 49     bool operator<(const Edge&x)const
 50     {
 51         return dis<x.dis;
 52     }
 53     void print()
 54     {
 55         cout<<"u="<<u<<","<<"v="<<v<<","<<"dis="<<dis<<endl;
 56     }
 57 } e[maxn*maxn];
 58 
 59 vector<Edge>edges;//存储新图的边
 60 vector<int>G[maxn];//记录临街的边号
 61 
 62 double Dis(int i,int j)
 63 {
 64     double x1=X[i],x2=X[j],y1=Y[i],y2=Y[j];
 65     return (sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)));
 66 }
 67 
 68 int findx(int x)
 69 {
 70     if (p[x]==x) return x;
 71     else return p[x]=findx(p[x]);
 72 }
 73 
 74 void merge(int x,int y)
 75 {
 76     int px=findx(x);
 77     int py=findx(y);
 78     p[px]=py;
 79 }
 80 
 81 void init()
 82 {
 83     cin>>n;
 84     cnt=0;L=0;
 85     for(int i=1; i<=n; i++)
 86     {
 87         X[i]=nextnum();//坐标值实数
 88         Y[i]=nextnum();
 89         Peo[i]=nextint();
 90     }
 91     for(int i=1; i<=n; i++)
 92         for(int j=1; j<=n; j++)
 93         {
 94             if (i==j) continue;
 95             e[cnt++]=(Edge){i,j,Dis(i,j)};//建图
 96         }
 97 }
 98 
 99 void prim()//最小生成树&&构建新的图
100 {
101     for(int i=1;i<=n;i++) G[i].clear();
102     edges.clear();
103     for(int i=1; i<=n; i++) p[i]=i;
104     sort(e,e+cnt);
105 
106     for(int i=0; i<cnt; i++)
107     {
108         int u=e[i].u,v=e[i].v;
109         double dis=e[i].dis;
110         int pu=findx(u),pv=findx(v);
111         if (pu==pv) continue;
112         L+=dis;
113         merge(u,v);
114         edges.push_back((Edge){u,v,dis});
115         G[u].push_back(edges.size()-1);
116         edges.push_back((Edge){v,u,dis});
117         G[v].push_back(edges.size()-1);
118 
119         if (edges.size()==2*(n-1)) break;
120     }
121 }
122 typedef pair<int,double> Node;//<上一个点,由起点到上一个点的通路上的最大值>
123 void max_dis()//找到最小生成树上的任意两点之间的通路的最大的边的长度,网上大多数版本是DFS实现,故写了BFS
124 {
125     memset(MaxDis,0,sizeof(MaxDis));
126     bool mark[maxn];
127     for(int i=1;i<=n;i++)
128     {
129         memset(mark,0,sizeof(mark));
130         queue<Node>Q;
131         Q.push(make_pair(i,0));
132         while(!Q.empty())
133         {
134             Node Kn=Q.front();Q.pop();
135             int u=Kn.first;double dis=Kn.second;
136             if (mark[u]) continue;
137             mark[u]=true;
138             int m=G[u].size();
139             for(int j=0;j<m;j++)
140             {
141                 Edge e=edges[G[u][j]];
142                 int v=e.v;
143                 if (MaxDis[i][v]>0) continue;//important,小技巧,因为存的是双向边,所以必须消除回退的影响
144                 dis=MaxDis[i][v]=max(Dis(u,v),dis);
145                 Q.push(make_pair(v,dis));
146             }
147         }
148     }
149 }
150 
151 int main()
152 {
153     int cas=0;
154     cin>>cas;
155     while(cas--)
156     {
157         init();
158         prim();
159         max_dis();
160         double ans=0;
161         for(int i=2; i<=n; i++)//枚举每一条道路
162             for(int j=1; j<i; j++)
163             {
164                 int A=Peo[i]+Peo[j];
165                 double B=L-MaxDis[i][j];
166                 ans=max(ans,A/B);
167             }
168         printf("%.2lf\n",ans);
169     }
170     return 0;
171 }

转载于:https://www.cnblogs.com/little-w/p/3595422.html

相关文章:

【Runtime】动态添加方法demo

今天写一个小demo来演示下runtime的消息转发和动态添加方法。 一般项目中都会有保存当前登录用户资料的需求&#xff0c;我们可以直接将登录成功后的用户信息分别保存到NSUserDefaults中&#xff1a; [def setObject:"JackXu" forKey:"UserName"];[def set…

Zabbix之主机的添加与删除(二)

接着上一篇内容继续讲&#xff1a; 环境等都是建立在上一篇内容的基础上的&#xff0c;见https://blog.csdn.net/weixin_41922887/article/details/83755271 redhat6 test1: 172.25.1.11 zabbix-agent redhat7 server: 172.25.1.1 …

昨天网上感觉好冷,睡在席子上都是感觉打哈欠

今天爸妈也是休息一天&#xff0c;中午听说是要到外婆家去&#xff0c;不过家里就不知道会不会有一个团圆聚餐了&#xff0c;还有伴月就是国庆解&#xff0c;那时就要吧这个推掉值班的事情做好下。 转载于:https://www.cnblogs.com/bkchengzheng/p/5874328.html

几行代码实现神奇移动的过渡动画

1.效果如图&#xff1a; 2.实现&#xff1a; 假设需求为如上图&#xff0c;点击ViewController01后&#xff0c;ViewController01上的两张图片&#xff0c;移动到ViewContoller02中&#xff0c;其实两个ViewController的View上分别放置了这两张图&#xff0c;JXMagicMove就是实…

php字符串处理函数相关操作

<?php//获取tech和98426这两个字符串$str "http://info.meadin.com/tech/98426_1.shtml";echo $newstr substr($str,7,strlen($str)); //info.meadin.com/tech/98426_1.shtml$arr explode(/,$newstr);$num $arr[1];//tech$user strstr($arr[2], _, true); /…

介绍Zabbix的两种监控模式(主动模式和被动模式)

Zabbix agent检测分为两种模式&#xff1a;主动模式和被动模式 被动模式&#xff0c;也是默认的Zabbix监控模式&#xff0c;被动模式是相对于proxy来说的。proxy主动发送数据就是主动模式&#xff0c;proxy等待server的请求再发送数据就是被动模式。主动模式有个好处就是可以有…

【Step By Step】将Dotnet Core部署到Docker下

一、使用.Net Core构建WebAPI并访问Docker中的Mysql数据库 这个的过程大概与我之前的文章《尝试.Net Core—使用.Net Core Entity FrameWork Core构建WebAPI&#xff08;一&#xff09;》一致。 但是在我们这里&#xff0c;由于docker中无法部署sql server&#xff0c;所以我采…

ipad无法与itunes同步,提示因为这台电脑不再被授权使用在此ipad上购买的项目解决方案...

1、iOS设备用数据线连接到电脑&#xff1b;2、打开电脑上的iTunes 11&#xff0c;按CtrlB键调出菜单栏&#xff0c;按CtrlS键调出边栏&#xff1b;在边栏的 设备 下面看到你的iOS设备&#xff1b;3、点击菜单栏中的商店&#xff0c;点击 对这台电脑授权&#xff0c;输入你的App…

iOS根据字节数截取字符串

最近项目有个需求&#xff0c;文章的作者最多显示7个中文字&#xff0c;英文字符算半个中文字&#xff0c;超过7个中文字&#xff0c;则显示&#xff1a;前7个中文字...&#xff0c;使用NSString的length方法&#xff0c;不管是一个中文还是英文字符&#xff0c;都是返回1。因此…

搭建Zabbix分布式监控

1、实现zabbix监控nginx 实验环境&#xff1a; server1 172.25.1.1 server redhat7 test1 172.25.1.11 agent redhat7 在“手动添加”主机的基础上进行扩展 开启服务&#xff1a; [rootserver ~]# systemctl…

Codeforces Round #372 (Div. 2), problem: (B) Complete the Word

水题&#xff0c;每次截取长度为26的字符串&#xff0c;然后直接进行修改就可以 然而本弱渣昨天wa看很久 include<bits/stdc.h> using namespace std; int n,c; int ans[30]; int main() { string s; cin>>s; int tt0; int ns.size(); if(n<26) { cout<<&…

百练 2973 Skew数 解题报告

思路&#xff1a; 计算出每一个skew数的不同位数表示的权值&#xff0c;然后用该位与权值相乘。用int数组来装权值&#xff0c;用char数组来装skew数。 代码&#xff1a; #include<stdio.h> #include<string.h> int main() {int i, k, sum;int base[32];char skew[…

【Python】在Mac系统中安装Pygame

我们通过Homebrew来安装Pygame&#xff0c;Homebrew是Mac OSX上的软件包管理工具&#xff0c;如果还没安装Homebrew&#xff0c;将以下命令粘贴至终端先安装Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install…

zabbix部署onealert云警告平台

onealert告警功能 告警 All In One&#xff0c;支持微信、邮箱、短信、APP、电话告警支持接入 Zabbix、Nagios、阿里云、腾讯云、监控宝等等告警信息灵活的分配策略&#xff0c;可灵活的分配告警信息发送给相关人员微信、邮箱、app 等告警方式全部免费实验环境&#xff1a; 首…

StringBuilder、StringBuffer、String区别

相信大家对 String 和 StringBuffer 的区别也已经很了解了&#xff0c;但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方&#xff0c;今天重新把这个概念给大家复习一下&#xff0c;顺便牵出 J2SE5.0 里面带来的一个新的字符操作的类—— StringBuilder &#xf…

Class中isAssignableFrom() 方法

看Spring源码的时候看到这个方法&#xff1a; 1 protected WebApplicationContext createWebApplicationContext(ServletContext sc) { 2 Class<?> contextClass determineContextClass(sc); 3 if (!ConfigurableWebApplicationContext.class.isAs…

【iOS】iOS10.3新增API:应用内评分

1、需求 在iOS10.3以前&#xff0c;APP引导用户评分时需要跳转到AppStore中操作&#xff0c;并且AppStore在国内有时加载会较慢&#xff0c;即便有的用户想给APP好评&#xff0c;但是等了几秒钟评分页面还没加载出来从而放弃。在iOS10.3中&#xff0c;苹果新增了APP内评分的新…

dhcp动态主机配置协议

dhcp简介&#xff1a; 动态主机设置协议&#xff08;Dynamic Host Configuration Protocol&#xff0c;DHCP&#xff09;是一个局域网的网络协议&#xff0c;使用UDP协议工作&#xff0c;计算机网络应用层协议。 主要有两个用途&#xff1a;用于内部网或网络服务供应商自动分配…

JSONP--解决ajax跨域问题

取不到数据&#xff01; 上周客户新买了服务器&#xff0c;原本在旧的服务器上放着客户的Web主页信息和一个后台程序(asp.net)&#xff0c;在客户的主页中有一个动态显示最新消息的处理&#xff0c;这个处理就是通过ajax异步从那个后台程序中取得的。由于又购买了新的服务器&am…

OC基本数据存储方式

/** 一,数据存储 常用方式(5种) 1,XML属性列表 -- 保存在Doucuments文件夹 2,偏好设置(NSUserDefault)-- Library/Preference 需要配合writetoFile来配合使用,保存到沙盒 3,归档(NSKeyedArchiver) -- 实现coding协议 4,sqlite --使用sqlite语法操作数据库 5,Core Data -- 由系统…

Xcode可重用代码块code snippets

一. 关于code snippets 通过Xcode的重用代码块&#xff08;code snippets&#xff09;可快速输入预设好的常用代码模板&#xff0c;如通过键入 hystrong 系统会直接替代为 property(nonatomic,strong) <#class#> <#name#>;二. 添加方法 如下图进行选择&#…

自动化运维工具Ansible

ansible简介&#xff1a; ansible是新出现的自动化运维工具&#xff0c;基于Python开发&#xff0c;集合了众多运维工具&#xff08;puppet、cfengine、chef、func、fabric&#xff09;的优点&#xff0c;实现了批量系统配置、批量程序部署、批量运行命令等功能。 ansible是基…

jquery 的3D Carousel插件参数说明

这个插件大家都很熟悉了&#xff0c;但是在网上找了很久找不到相关的资料&#xff0c;只有自己琢磨研究了一下。有些参数一眼都可以看出意思&#xff0c;在此我只说一下每个图片要想带一些扩展信息怎么处理。 1&#xff1a;首先需要创建一个ul对象&#xff0c;然后里面每一个li…

利用runtime实现KVO

KVO实现原理 一.关于KVO KVO(Key-Value Observing)提供一种机制&#xff0c;当指定对象的属性被修改后&#xff0c;就会通知观察者。简单的说就是每次指定的被观察的对象的属性被修改后&#xff0c;KVO就会自动通知相应的观察者了。 KVO其实也是“观察者”设计模式的一种应用…

Xcode 5.0.1安装插件:规范注释生成器VVDocumenter + OSX 10.9.2

终于有时间停下来玩下Xcode的插件了&#xff0c;最近需要用下规范注释生成器&#xff0c;于是装了个插件用下。 下面是安装过程&#xff08;简单的不得了&#xff09;&#xff1a; 1.前往GitHub下载工程文件&#xff1a;VVDocumenter-Xcode 2.用Xcode打开工程&#xff0c;Comma…

shell的数字、字符串处理

1、显示小数点前的0 由于bc计算器目前还不支持显示小数点前的0&#xff0c;所以我们要用一用强大的awk工具啦&#xff01; 例如&#xff1a; echo "scale2; 0.13 0.1" | bc | awk {printf "%.2f", $0} 2、表示1~21的命令 echo seq 1 21 3、shell 将字符串…

Javascript动画效果(四)

Javascript动画效果&#xff08;四&#xff09; 前面我们自己写了一个小小的关于js动画的插件&#xff0c;下面我们来使用之前的框架来完成我们想要的动画效果。我们经常在淘宝网中看到&#xff0c;鼠标经过某一图片时&#xff0c;该图片有从上滚出而又从下滚入的效果&#xff…

APP转让时提示:您必须移除要转让的 App 的所有构建版本和测试员,并清除“测试信息”下的所有信息

转让时出现如下问题无法转让&#xff1a; 解决方法&#xff1a; 在TestFlight中&#xff0c;将所有历史构建测试版本均设置为过期&#xff1a; 结果&#xff1a;

PHP shell模式下执行PHP文件报错

1.在shell下直接运行php文件 出现 PHP Deprecated: Comments starting with # are deprecated in /etc/php5/cli/conf.d/ming.ini on line 1 in Unknown on line 0 错误提示信息 2.解决办法&#xff1a; 将 vim /etc/php5/cli/conf.d/ming.ini 文件中第一行 # configuration …

时间同步服务器(默认)chrony和ntp

Rhel7时间同步服务器(默认)chrony 端口&#xff1a;323 chrony简介&#xff1a; 是一个开源软件&#xff0c;可实现系统时钟和时钟服务器同步&#xff0c;让时间保持精确 两部分组成&#xff1a;chronyd和chronyc 其中chronyd是后台运行的守护进程&#xff0c;用于调整内…