zoukankan      html  css  js  c++  java
  • Out of Hay.

    题目背景

    奶牛爱干草

    题目描述

    Bessie 计划调查N (2 <= N <= 2,000)个农场的干草情况,它从1号农场出发。农场之间总共有M (1 <= M <= 10,000)条双向道路,所有道路的总长度不超过1,000,000,000。有些农场之间存在着多条道路,所有的农场之间都是连通的。

    Bessie希望计算出该图中最小生成树中的最长边的长度。

    输入格式

    两个整数N和M。

    接下来M行,每行三个用空格隔开的整数A_i, B_i和L_i,表示A_i和 B_i之间有一条道路长度为L_i。

    输出格式

    一个整数,表示最小生成树中的最长边的长度。

    输入输出样例

    输入 #1
    3 3
    1 2 23
    2 3 1000
    1 3 43
    输出 #1
    43



    再来一道Kruskal

    用一个while循环,判断如果有两条边是不连通的,就将它们进行合并,并且判断是不是最大的。


    #include<cstdio>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int n,m,i,ans,p[20005],f;
    struct pt{
        int pnt1;
        int pnt2;
        int length;
    } a[200100];
    
    bool cmp(pt x, pt y){
        return x.length<y.length;
    }
    
    int ch(int x){
        if(p[x]==x){
            return p[x];
        }
        p[x]=ch(p[x]);
        return p[x];
    }
    int main(){
        scanf("%d%d",&n,&m);
        for(i=1;i<=m;i++){
            cin>>a[i].pnt1>>a[i].pnt2>>a[i].length;
        }
        for(i=1;i<=n;i++){
            p[i]=i;
        }
        sort(a+1,a+m+1,cmp);
        i=0;
        while(f<n-1){
            i++;
            if (ch(a[i].pnt1)!=ch(a[i].pnt2)){
                p[ch(a[i].pnt1)]=ch(a[i].pnt2);
                if (ans<a[i].length){
                    ans=a[i].length;
                }
                f++;
            }
        }
        printf("%d",ans);
    }
  • 相关阅读:
    五种实用DOM方法总结
    九月工作总结
    八月下半月工作总结
    【工作总结】七月底-八月中
    权限管理功能的实现
    JavaWeb项目出现红色感叹号
    项目中遇到的AngularJs问题
    五月工作总结
    生成流水号的优化
    AngularJS scope 作用域的问题
  • 原文地址:https://www.cnblogs.com/hrj1/p/11149937.html
Copyright © 2011-2022 走看看