玄关,求调!!!
查看原帖
玄关,求调!!!
1382038
linruicong_gegeji楼主2025/1/3 20:15

题目传送门
记录详情

#include<bits/stdc++.h>
using namespace std;
int n,m,a[505][505],cnt,fa[505],tot;
long long ans;
struct str{
    int u,v,w;
}q[505];
int find(int x) {return x==fa[x]?x:fa[x]=find(fa[x]);}
bool cmp(str x,str y){return x.w<y.w;}
long long kru()
{
    int eu,ev;
    long long sum=0;
    sort(q+1,q+1+cnt,cmp);
    for(int i=1;i<=m;i++)
    {
        eu=find(q[i].u);
        ev=find(q[i].v);
        if(eu!=ev)
        {
            sum+=q[i].w;
            fa[ev]=eu;
        }
        if(++tot==m) break;
    }
    return sum;
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++) fa[i]=i;
    for(int i=1;i<=m;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&a[i][j]);
            if(i<j&&a[i][j]!=0)
            {
                cnt++;
                q[cnt].u=i;
                q[cnt].v=j;
                q[cnt].w=a[i][j];
            }
        }
    }
    for(int i=1;i<=m;i++)
    {
        q[++cnt].u=0;
        q[cnt].v=i;
        q[cnt].w=n;
    }
    ans=kru();
    printf("%lld",ans);
    return 0;
}
2025/1/3 20:15
加载中...