比赛 暑期小训练题 评测结果 AAAAAAAAAA
题目名称 最短网络 最终得分 100
用户昵称 菜鸟 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2021-07-10 15:19:38
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
int n;int ans=0;
int fa[101]={0};
int Find_set(int x)
{
    if(fa[x]!=x)
    {
        fa[x]=Find_set(fa[x]);
        
    }return fa[x];
}
void Make_set(int x,int y)
{
    int px=Find_set(x);
    int py=Find_set(y);
    if(px!=py)
    {
        fa[px]=py;
    }
}
struct node
{
    int u,v;
    int length;
}a[10001]; 

bool cmp(node x,node y)
{
    return x.length<y.length;
}
int main()
{
    freopen("agrinet.in","r",stdin);
    freopen("agrinet.out","w",stdout);
      cin>>n;
      int o;
      int f=0;
      for(int i=1;i<=n;i++)
      {fa[i]=i;
          for(int j=1;j<=n;j++)
          {
              f++;
              cin>>o;
              if(j<i)
              {
                  a[f].u=i;
                  a[f].v=j;
                  a[f].length=o;
              }
          }
      } 
      sort(a+1,a+1+f,cmp);
      for(int k=1;k<=f;k++)
      {
          if(Find_set(a[k].u)!=Find_set(a[k].v))
          {
              ans+=a[k].length;
              Make_set(a[k].u,a[k].v);
          }
       }
       cout<<ans<<endl;return 0; 
}