14 条题解

  • -1
    @ 2022-8-18 17:05:49

    KruskalKruskal 解决问题,ansans 注意开 longlonglong long ,不然会爆

    下面是 ACAC 代码:

    #include<bits/stdc++.h>
    using namespace std;
    inline int read()
    {
        int x=0;
        bool flag=1;
        char c=getchar();
        while(c<'0'||c>'9')
        {
            if(c=='-')
                flag=0;
            c=getchar();
        }
        while(c>='0'&&c<='9')
        {
            x=(x<<1)+(x<<3)+c-'0';
            c=getchar();
        }
        return (flag?x:~(x-1));
    }
    int n,m,k;
    long long ans=0;
    int f[100001];
    struct edge
    {
    	int x,y,z;
    }a[200001];
    inline void init()
    {
    	for(int i=1;i<=n;i++)
    	{
    		f[i]=i;
    	}
    }
    inline int find(int x)
    {
    	return x==f[x]?x:f[x]=find(f[x]);
    }
    inline bool cmp(edge a,edge b)
    {
        return a.z<b.z;
    }
    int main()
    {
    	n=read();m=read();
    	init();
    	for(int i=1;i<=m;i++)
    	{
    		int x,y,z;
    		a[i].x=read();a[i].y=read();a[i].z=read();
    	}
    	sort(a+1,a+m+1,cmp);
    	for(int i=1;i<=m;i++)
    	{
    		int fx=find(a[i].x),fy=find(a[i].y);
    		if(fx==fy)
    		{
    			continue;
    		}
    		f[fx]=fy;
    		ans+=a[i].z;	
    	}
    	cout<<ans;
    	return 0;
    }
    

    完结撒花!

    信息

    ID
    91
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    871
    已通过
    286
    上传者