zoukankan      html  css  js  c++  java
  • floyd算法 青云的机房组网方案(简单)

    青云的机房组网方案(简单)

    青云现在要将 nn 个机房连成一个互相连通的网络。工程师小王设计出一个方案:通过在 nn 个机房之间铺设 n-1n1 条双向的光纤,将所有的机房连接。可以假设数据在两个机房之间的光纤传输需要 11 单位时间。每个机房 ii 有一个初始值 a_iai​​,当两个机房的初始值之间互质时,我们认为这两个机房之间的传输性能是非常重要的。请帮小王计算出所有数值互质的机房对之间的传输时间之和。

    输入格式

    第一行输入一个正整数 nn,第二行输入 nn 个正整数 a_1...a_na1​​...an​​,表示 nn 个机房的初始值。

    接下来输入 n-1n1 行,每行输入两个数 a,ba,b,表示机房 aa 和机房 bb 之间有一条双向网络管道。

    对于简单版本:n leq 500n500,1 leq a_i leq 501ai​​50;

    对于中等版本:n leq 10000n10000, 1 leq a_i leq 5001ai​​500;

    对于困难版本:n leq 100000n100000,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给我报上这个比赛,结果他自己都不做了,我就做出一个

     1 /*floyd算法:直接做就可以了,暴力统计结果*/
     2 #include<iostream>
     3 using namespace std;
     4 #define N 510
     5 long long jz[N][N];
     6 #include<cstdio>
     7 #include<cstring>
     8 int a[N],n,x,y;
     9 int gcd(int b,int c)
    10 {
    11     if(!c)
    12         return b;
    13     return gcd(c,b%c);
    14 }
    15 void input()
    16 {
    17     scanf("%d",&n);
    18     memset(jz,10,sizeof(jz));
    19     for(int i=1;i<=n;++i)
    20     {
    21         scanf("%d",&a[i]);
    22     }
    23     for(int i=1;i<=n-1;++i)
    24     {
    25         scanf("%d%d",&x,&y);
    26         jz[x][y]=1;jz[y][x]=1;
    27     }
    28 }
    29 void floyed()
    30 {
    31     for(int k=1;k<=n;++k)
    32       for(int i=1;i<=n;++i)
    33         for(int j=1;j<=n;++j)
    34         jz[i][j]=min(jz[i][j],jz[i][k]+jz[k][j]);
    35 }
    36 int main()
    37 {
    38     input();
    39     floyed();
    40     long long ans=0;
    41     for(int i=1;i<=n;++i)
    42       for(int j=i+1;j<=n;++j)
    43       {
    44           if(gcd(a[i],a[j])==1)
    45           {
    46               ans+=jz[i][j];
    47           }
    48       }
    49     cout<<ans<<endl;
    50     return 0;
    51 }
  • 相关阅读:
    Codeforces 632D 暴力
    Codeforces 632C
    nyoj 1070 诡异的电梯 简单dp
    Codeforces 6225B KMP
    Codeforces 631D
    笔记4:多层感知器(自定义模型)
    笔记3:逻辑回归(分批次训练)
    笔记2:张量简介
    笔记1:入门实例
    送快递(贪心+树形结构)
  • 原文地址:https://www.cnblogs.com/c1299401227/p/5560391.html
Copyright © 2011-2022 走看看