zoukankan      html  css  js  c++  java
  • Constructing Roads----poj2421(最小生成树Kruskal)

    题目链接:

    http://poj.org/problem?id=2421

    想把n个村庄连接在一起;求最小生成树,不同的是已经有了m条线段链接在一起了,求剩下的;

    感觉用Kruskal会简单一点

    #include<stdio.h>
    #include<string.h>
    #include<map>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #define N 110
    #define INF 0xfffffff
    
    using namespace std;
    
    int f[N];
    
    struct node
    {
        int x,y,d;
    }a[N*N];
    
    int cmp(node p,node q)
    {
        return p.d < q.d;
    }
    
    int Find(int x)
    {
        if(x!=f[x])
            f[x]=Find(f[x]);
        return f[x];
    }
    
    int main()
    {
        int n, i, j, k, m, d, x, y, px, py, ans;
        while(scanf("%d",&n)!=EOF)
        {
            memset(a, 0, sizeof(a));
            k = ans = 0;
            for(i=0;i<=n;i++)
                f[i]=i;
            for(i=1; i<=n; i++)
                for(j=1; j<=n; j++)
                {
                    scanf("%d",&d);
                    if(i<j)
                        a[k].x = i, a[k].y = j, a[k++].d = d;
                }
            sort(a,a+k,cmp);
            scanf("%d", &m);
            for(i=0; i<m; i++)
            {
                scanf("%d%d", &x, &y);
                px = Find(x);
                py = Find(y);
                if(px != py)
                    f[px] = py;
            }
            for(i=0; i<k; i++)
            {
                px = Find(a[i].x);
                py = Find(a[i].y);
                if(px != py)
                    f[px] = py,ans+=a[i].d;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    仓储模式Repository
    jwt测试
    net core webapi jwt
    net core发布到iis遇到的困难
    新的目标
    L9-2.安装mysql数据库
    L9-1-安装Apache
    L8_2
    Linux 08
    Linux 07 故障恢复
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4680443.html
Copyright © 2011-2022 走看看