美文网首页
还有克鲁斯卡尔

还有克鲁斯卡尔

作者: 与卿__歌 | 来源:发表于2017-04-01 23:16 被阅读0次

    poj - 1258
    居然不说是多组样例.......

    #include<stdio.h>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    #define INF 100005
    int n;
    int Count;
    int pre[100005];
    struct node
    {
        int v;
        int w;
        int edge;
    }s[100005];
    bool cmp(node a,node b)
    {
        return a.edge<b.edge;
    }
    void unit()
    {
        for(int i=0;i<INF;i++)
        {
            pre[i]=i;
        }
    }
    int find(int x)
    {
        if(pre[x]==x)
        return x;
        else
        return find(pre[x]);
    }
    int Union(int a,int b)
    {
        int X=find(a);
        int Y=find(b);
        if(X!=Y)
        {
            pre[X]=Y;
        }
         pre[a]=find(a);
    pre[b]=find(b);
    }
    void krual()
    {
        int sum=0;
        int num=0;
        for(int i=0;i<Count;i++)
        {
            if(find(s[i].v)!=find(s[i].w))
            {
                sum=sum+s[i].edge;
                num++;
                Union(find(s[i].v),find(s[i].w));
            }
            if(num>=n-1)
            {   printf("%d\n",sum);
            break;
        }
        }
    }
    int main()
    {
       while(scanf("%d",&n)!=EOF)
       {
        Count=0; 
       int x;
       unit();
       for(int i=0;i<n;i++)
       {
        for(int  j=0;j<n;j++)
        {
            if(i>j)
            {
            scanf("%d",&s[Count].edge);
            s[Count].v=i;
            s[Count].w=j;
            Count++;
            }
            else
            scanf("%d",&x);
            
        }
       }    
       sort(s,s+Count,cmp);
       krual();
       }
    } 
    

    相关文章

      网友评论

          本文标题:还有克鲁斯卡尔

          本文链接:https://www.haomeiwen.com/subject/blmwottx.html