POJ1258最小生成树简单题
阅读原文时间:2023年07月08日阅读:2

**题意:

      给你个图,让你求一颗最小生成树。

思路:

     裸题,克鲁斯卡尔或者普利姆都行。

#include

#include

using namespace std;

typedef struct

{

    int a ,b ,c;

}NODE;

NODE node[100*100+10];

int mer[105];

bool camp(NODE a ,NODE b)

{

    return a.c < b.c;

}

int finds(int x)

{

    return x == mer[x] ? x : mer[x] = finds(mer[x]);

}

int main ()

{

    int n ,i ,j ,ans;

    while(~scanf("%d" ,&n))

    {

        int nowid = 0;

        for(i = 1 ;i <= n ;i ++)

        {

            for(j = 1 ;j <= n ;j ++)

            {

                nowid++;

                scanf("%d" ,&node[nowid].c);

                node[nowid].a = i ,node[nowid].b = j;

            }

            mer[i] = i;

        }

        sort(node + 1 ,node + nowid + 1 ,camp);

        ans = 0;

        for(i = 1 ;i <= nowid ;i ++)

        {

            int x = finds(node[i].a);

            int y = finds(node[i].b);

            if(x == y) continue;

            ans += node[i].c;

            mer[x] = y;

        }

        printf("%d\n" ,ans);

    }

    return 0;

}
**