Java教程

361. 连接农场 Agri-Net(挑战程序设计竞赛)

本文主要是介绍361. 连接农场 Agri-Net(挑战程序设计竞赛),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

题目链接:https://www.papamelon.com/problem/361;

今天最后一道mst,明天再战;

Talk is cheap. Show me the code.

#include<bits/stdc++.h>
using namespace std;
const int num=1e4+10;
int s[110];
struct edge
{
    int u;
    int v;
    int w;
}e[num];
int cnt;
int ans;
int n;
bool cmp(edge a,edge b)
{
    return a.w<b.w;
}
int find(int x)
{
    if(x!=s[x])
    s[x]=find(s[x]);
    return s[x];
}
void kruskal()
{
    int t=0;
    for(register int i=1;i<=n;i++)
    s[i]=i;
    sort(e+1,e+1+cnt,cmp);
    for(register int i=1;i<=cnt;i++)
    {
        int b=find(e[i].u);
        int c=find(e[i].v);
        if(b==c)
        continue;
        s[c]=b;
        ans+=e[i].w;
        t++;
        if(t==n-1)
        break;
    }
    
}
int main()
{
    std::ios::sync_with_stdio(false);
    while(~scanf("%d",&n))
{
    ans=0;
    cnt=0;
        for(register int i=1;i<=n;i++)
        {
            for(register int j=1;j<=n;j++)
            {
                int temp;
                cin>>temp;
                if(temp)
                {
                    e[++cnt].u=i;
                    e[cnt].v=j;
                    e[cnt].w=temp;
                }
            }
        }
        kruskal();
        cout<<ans<<endl;
}
    return 0;
}

 

这篇关于361. 连接农场 Agri-Net(挑战程序设计竞赛)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!