zoukankan      html  css  js  c++  java
  • HDU 1233-还是畅通工程

    原题链接:点击此处

    1222的升级版,按照费用从低到高排序,然后如果不是在一个集合里就合并,并加上所需的路程,最后所得就是所需的最短路程了。

    程序如下:

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    using namespace std;
    
    struct Tree
    {
        int u,v;
        int len;
    }tree[5000]; //每条边是一个结构体,u,v分别为边两头的点,len为边的长度
    
    int pre[103];//村庄的个数,节点
    
    void init(int n)
    {
        for(int i=1;i<=n;i++)
            pre[i]=i;//初始化 ,一开始每个村庄都是一个单独的集合,编号从1到n
    }
    
    bool cmp(Tree a,Tree b)
    {
        if(a.len<b.len)
            return true;
        return false;
    } //按边的长短从小到大排序
    
    int Find(int x)
    {
        return pre[x]==x?x:Find(pre[x]);//找根结点,如2的父节点是3,再找3的父节点是几,直到x的根节点为x为止
    }
    
    int main()
    {
        int m,n,i;
        while(scanf("%d",&m)&&m)
        {
            int cost=0;
            n=m*(m-1)/2;//边的条数,题目中
            init(m);
            for(i=1;i<=n;i++)
                scanf("%d %d %d",&tree[i].u,&tree[i].v,&tree[i].len);
            sort(tree+1,tree+1+n,cmp);
            for(i=1;i<=n;i++)
            {
                int x=Find(tree[i].u);
                int y=Find(tree[i].v);
                if(x==y)
                    continue;
                pre[y]=x;//这里是把x当作了整棵最小生成树的根节点,写成parent[x]=y也可以,根节点换成了y,这里的x,y值都不会大于村庄的编号
                cost+=tree[i].len;
            }
            printf("%d
    ",cost);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Java虚拟机(JVM)中的内存设置详解
    设置TOMCAT的JVM虚拟机内存大小
    什么是SQL注入式攻击
    常见的数据库基础面试题大全
    Struts1与Struts2的12点区别
    sql server导出insert语句
    jsp 将html字符串输出html标签
    GC 基础
    jstl fn标签
    Struts2 中result type属性说明
  • 原文地址:https://www.cnblogs.com/gdvxfgv/p/5721809.html
Copyright © 2011-2022 走看看