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;
    }
  • 相关阅读:
    Mysql 配置主从
    ZJ 虚拟机扩直接扩原磁盘
    Linux 配置samba
    mysql 5.6 升级5.7
    binlog作用
    删除全部binlog不影响数据库运行,类似Oracle的archivelog
    mysql清理binlog
    Perl计数器
    perl增量分析日志
    perl 获取更新部分日志
  • 原文地址:https://www.cnblogs.com/zhengguiping--9876/p/4680443.html
Copyright © 2011-2022 走看看