floyd算法 青云的机房组网方案(简单)
青云的机房组网方案(简单)
青云现在要将 nn 个机房连成一个互相连通的网络。工程师小王设计出一个方案:通过在 nn 个机房之间铺设 n-1n−1 条双向的光纤,将所有的机房连接。可以假设数据在两个机房之间的光纤传输需要 11 单位时间。每个机房 ii 有一个初始值 a_iai,当两个机房的初始值之间互质时,我们认为这两个机房之间的传输性能是非常重要的。请帮小王计算出所有数值互质的机房对之间的传输时间之和。
输入格式
第一行输入一个正整数 nn,第二行输入 nn 个正整数 a_1...a_na1...an,表示 nn 个机房的初始值。
接下来输入 n-1n−1 行,每行输入两个数 a,ba,b,表示机房 aa 和机房 bb 之间有一条双向网络管道。
对于简单版本:n \leq 500n≤500,1 \leq a_i \leq 501≤ai≤50;
对于中等版本:n \leq 10000n≤10000, 1 \leq a_i \leq 5001≤ai≤500;
对于困难版本:n \leq 100000n≤100000,a_i \leq 100000ai≤100000。
输出格式
输出一行,表示所有初始值互质的机房对的传输时间和。
样例输入
- 4
- 1 2 3 4
- 1 2
- 2 3
- 3 4
样例输出
- 8
提示信息
对于第一组样例,每一组初始值互质的机房对的传输时间如下:
(1,2)(1,2):11
(1,3)(1,3):22
(1,4)(1,4):33
(2,3)(2,3):11
(3,4)(3,4):11
所以,所有初始值互质的机房对的传输时间和为 1+2+3+1+1=81+2+3+1+1=8
xyd给我报上这个比赛,结果他自己都不做了,我就做出一个
- /*floyd算法:直接做就可以了,暴力统计结果*/
- #include<iostream>
- using namespace std;
- #define N 510
- long long jz[N][N];
- #include<cstdio>
- #include<cstring>
- int a[N],n,x,y;
- int gcd(int b,int c)
- {
- if(!c)
- return b;
- return gcd(c,b%c);
- }
- void input()
- {
- scanf("%d",&n);
- memset(jz,,sizeof(jz));
- for(int i=;i<=n;++i)
- {
- scanf("%d",&a[i]);
- }
- for(int i=;i<=n-;++i)
- {
- scanf("%d%d",&x,&y);
- jz[x][y]=;jz[y][x]=;
- }
- }
- void floyed()
- {
- for(int k=;k<=n;++k)
- for(int i=;i<=n;++i)
- for(int j=;j<=n;++j)
- jz[i][j]=min(jz[i][j],jz[i][k]+jz[k][j]);
- }
- int main()
- {
- input();
- floyed();
- long long ans=;
- for(int i=;i<=n;++i)
- for(int j=i+;j<=n;++j)
- {
- if(gcd(a[i],a[j])==)
- {
- ans+=jz[i][j];
- }
- }
- cout<<ans<<endl;
- return ;
- }
floyd算法 青云的机房组网方案(简单)的更多相关文章
- 青云的机房组网方案(简单+普通+困难)(虚树+树形DP+容斥)
题目链接 1.对于简单的版本n<=500, ai<=50 直接暴力枚举两个点x,y,dfs求x与y的距离. 2.对于普通难度n<=10000,ai<=500 普通难度解法挺多 ...
- 2016 计蒜之道 初赛 第一场 D 青云的机房组网方案 (虚树)
大意: 给定树, 点$i$的点权为$a_i$, 求$\sum\limits_{a_i \perp a_j}dis(i,j)$ 中等难度可以枚举每条边的贡献, 维护子树内每个数出现次数$a$, 转化为求 ...
- 最短路之Floyd算法
1.介绍 floyd算法只有五行代码,代码简单,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3),可以求多源最短路问题. 2.思想: Floyd算法的基本思想如下:从任意节点A到任意节点 ...
- 多源最短路——Floyd算法
Floyd算法 问题的提出:已知一个有向网(或者无向网),对每一对定点vi!=vj,要求求出vi与vj之间的最短路径和最短路径的长度. 解决该问题有以下两种方法: (1)轮流以每一个定点为源点,重复执 ...
- Floyd算法简单实现(C++)
图的最短路径问题主要包括三种算法: (1)Dijkstra (没有负权边的单源最短路径) (2)Floyed (多源最短路径) (3)Bellman (含有负权边的单源最短路径) 本文主要讲使用C++ ...
- CCF(通信网络):简单DFS+floyd算法
通信网络 201709-4 一看到题目分析了题意之后,我就想到用floyd算法来求解每一对顶点的最短路.如果一个点和任意一个点都有最短路(不为INF),那么这就是符合的一个答案.可是因为题目超时,只能 ...
- 算法笔记_069:Floyd算法简单介绍(Java)
目录 1 问题描述 2 解决方案 2.1 使用Floyd算法得到最短距离示例 2.2 具体编码 1 问题描述 何为Floyd算法? Floyd算法功能:给定一个加权连通图,求取从每一个顶点到其它所 ...
- 最短路径Floyd算法【图文详解】
Floyd算法 1.定义概览 Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被 ...
- 图论篇3——最短路径 Dijkstra算法、Floyd算法
最短路径 问题背景:地图上有很多个城市,已知各城市之间距离(或者是所需时间,后面都用距离了),一般问题无外乎就是以下几个: 从某城市到其余所有城市的最短距离[单源最短路径] 所有城市之间相互的最短距离 ...
随机推荐
- 继续寻找app开发的技术方案
大概12年下半年开始,才有app开发已经来到身边的感觉. 但也一直只是感觉,没想到自己得亲身上阵. 由于要一个人做(帮朋友倒腾倒腾),而且要跨平台,而且前后台都要弄,而且时间有限. 最终选了web方式 ...
- JavaMail入门第二篇 创建邮件
JavaMail API使用javax.mail.Message类来表示一封邮件,Message类是一个抽象类,所以我们需要使用其子类javax.mail.internet.MimeMessage类来 ...
- mysql启动报错:Starting MySQL...The server quit without updating PID file
在mysql的data目录下误删除了mysql-bin.000001,mysql-bin.000002等文件,但是没有删除mysql-bin.index文件,此时启动mysql就会报错: Starti ...
- C# 分层 三层架构
Hello! 三层架构↓↓↓↓↓↓ 三层架构分为:表现层(UI(User Interface)).业务逻辑层(BLL(Business Logic Layer)).数据访问层(DAL(Data Acc ...
- <SharePoint 2013 用户界面设计与品牌化>学习系列之---基础
什么是SharePoint界面与品牌化设计 这一章主要介绍了: 为什么要品牌化SharePoint 介绍一些内部和互联网的SharePoint网站 简单 中等 复杂的三种品牌化方式 简单难度: 普通用 ...
- 2015年第2本(英文第1本):《The Practice of Programming》
2015年计划透析10本英文原著,最开始选定的第一本英文书是<Who Moved my Cheese>,可是这本书实在是太短.太简单了,总体的意思就是要顺应变化,要跳出自己的舒适区,全文不 ...
- Unity与Android的相互交互
1.Unity调用Android. Unity块代码: using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.play ...
- iOS开发 使用RMStore简化内购代码 + 内购买订单验证
现在很多的app里面都添加了应用内购买,网上关于苹果证书的生成和设置的教程比较多,这里就不多赘述了,推荐几个个人觉得说的比较详细的网址: http://www.jianshu.com/p/86ac7d ...
- json深度详解及org.json库
了解json (Javascript Object Notation) 网站:http://json.org/ english JSON (JavaScript Object Notation) i ...
- Windows下查看端口占用
最近在重新安装Mysql的时候,发现3306默认端口被占用了.类似的情况常常遇到,想查看到底是哪个程序把这个端口占用了. 下面是我google找到的方法,和大家分享. 1. 首先,使用netstat ...