zoukankan      html  css  js  c++  java
  • P1547 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

    #include <bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    #define inf 2147483647
    const ll INF = 0x3f3f3f3f3f3f3f3fll;
    #define ri register int
    template <class T> inline T min(T a, T b, T c)
    {
        return min(min(a, b), c);
    }
    template <class T> inline T max(T a, T b, T c)
    {
        return max(max(a, b), c);
    }
    template <class T> inline T min(T a, T b, T c, T d)
    {
        return min(min(a, b), min(c, d));
    }
    template <class T> inline T max(T a, T b, T c, T d)
    {
        return max(max(a, b), max(c, d));
    }
    #define pi acos(-1)
    #define me(x, y) memset(x, y, sizeof(x));
    #define For(i, a, b) for (int i = a; i <= b; i++)
    #define FFor(i, a, b) for (int i = a; i >= b; i--)
    #define mp make_pair
    #define pb push_back
    const int maxn = 100005;
    #define mod 100003
    const int N=500000;
    
    // name*******************************
    struct edge
    {
        int from,to,dis;
    } e[N];
    int pre[N];
    int Rank[N];
    int n,m;
    int ans;
    // function******************************
    void init(int x)
    {
        pre[x]=-1;
        Rank[x]=0;
    }
    int find(int x)
    {
        int t=x;
        while(pre[t]!=-1)t=pre[t];
        while(x!=t)
        {
            int k=pre[x];
            pre[x]=t;
            x=k;
        }
        return t;
    }
    void unionone(int a,int b)
    {
        int t1=find(a);
        int t2=find(b);
        if(Rank[t1]>Rank[t2])
            pre[t2]=t1;
        else pre[t1]=t2;
        if(Rank[t1]==Rank[t2])
            Rank[t2]++;
    }
    bool cmp(edge x,edge y)
    {
        return x.dis<y.dis;
    }
    //***************************************
    int main()
    {
    //    freopen("test.txt", "r", stdin);
        cin>>n>>m;
        For(i,1,n)
        init(i);
        For(i,1,m)
        {
            int a,b,c;
            scanf("%d%d%d",&a,&b,&c);
            e[i].from=a;
            e[i].to=b;
            e[i].dis=c;
        }
        sort(e+1,e+1+m,cmp);
        int cnt=0;
        For(i,1,m)
        {
            if(find(e[i].from)!=find(e[i].to))
            {
                unionone(e[i].from,e[i].to);
                cnt++;
                ans=e[i].dis;//因为已经排了序,直接赋值就好
                if(cnt==n-1)break; //押尾
            }
        }
        cout<<ans;
    
        return 0;
    }
  • 相关阅读:
    reids学习redis的五种基本数据类型
    CentOS下配置Java开发环境安装redis
    CentOS下配置Java开发环境安装Tomcat
    如何去除掉inlineblock元素之间的默认间距
    js按值传递还是按引用传递?
    overflow: hidden用法,不仅仅是隐藏溢出
    关于WinForm中的DataGridView控件显示数据字典的解决方案。
    C#中对Winform中的DataGridView的控制技巧。(单独控制某单元格的按钮不显示、某单元格的ReadOnly)
    改进版网页表格的合并单元格(支持不连续的列合并)
    [共享]MT随机算法(符合正态分布的随机算法)
  • 原文地址:https://www.cnblogs.com/planche/p/8688992.html
Copyright © 2011-2022 走看看