1 条题解

  • 0
    @ 2025-10-10 19:30:57

    C++ :

    #include<bits/stdc++.h>
    
    using namespace std;
    
    struct node{
        int x,y,w;
    }a[200002];
    
    int f[200002];
    
    bool cmp(node xx,node yy){//结构体排序
        return xx.w<yy.w;
    }
    
    int find(int x){
    //并查集说白了就是找父结点的过程,同一个父节点即同一个区间
        if(x==f[x]) return x;
        f[x]=find(f[x]);
        return f[x];
    }
    
    int main(){
        int n,k,m=0;
        scanf("%d",&n);
        for(int i=1;i<=n;i++){
            f[i]=i;
            for(int j=1;j<=n;j++)
            {
                scanf("%d",&k);
                if(j>i){
                //读入时加一个判断就可以了,不需要读那么多
                    m++;
                    a[m].x=i;a[m].y=j;a[m].w=k; 
                }   
            }
        }
        sort(a+1,a+m+1,cmp);//排序
        int ans=0,p=1;
        for(int i=1;i<=m;i++){
            if(find(a[i].x)!=find(a[i].y)){
            //如果不在一个集合
                ans+=a[i].w;
                f[find(a[i].x)]=a[i].y;
                //合并两个节点
                p++;
                if(p==n) break; 
            }
        }
        cout<<ans;
        return 0;
    }
    

    Pascal :

    var
    n,tj,i,j,k,x,y,t,min:longint;
    a:array[0..200,0..200]of longint;
    f:array[0..200]of longint;
    begin
        readln(n);
        fillchar(a,sizeof(a),0);
        fillchar(f,sizeof(f),0);
        for i:=1 to n do
        for j:=1 to n do
        read(a[i,j]);
        f[1]:=1;
        tj:=0;
        for i:=1 to n-1 do
        begin
            min:=maxlongint;
            for j:=1 to n do
            if f[j]=1 then
              for k:=1 to n do
              if f[k]=0 then
              if (a[j,k]<min)and(a[j,k]<>0) then
              begin
                  min:=a[j,k];
                  t:=k;
              end;
            if min<>maxint then
            begin
                tj:=tj+min;
                f[t]:=1;
            end;
        end;
        write(tj);
    end.
    
    • 1

    【基础】最短网络 Agri-Net(USACO3.1)

    信息

    ID
    847
    时间
    1000ms
    内存
    512MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者