zoukankan      html  css  js  c++  java
  • HDU 5624 KK's Reconstruction

    KK's Reconstruction

    Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
    Total Submission(s): 360    Accepted Submission(s): 151

    Problem Description
    Our lovely KK has a difficult Social problem.
    A big earthquake happened in his area.
    N(2N2000) cities have been implicated. All the roads between them are destroyed.
    Now KK was commissioned to rebuild these roads.
    However, after investigation,KK found that some roads are too damaged to rebuild.
    Therefore, there are only M(0M15000) roads can be rebuilt.
    KK needs to make sure that there is a way between any two cities, and KK wants to rebuild roads as few as possible.
    With rebuilding minimal number of roads, he also wants to minimize the difference between the price of the most expensive road been built and the cheapest one.
     
    Input
    The first line of the input file contains an integer T(1T10), which indicates the number of test cases.

    For each test case,The first line includes two integers N(2N2000)M(0M15000).

    The next M lines include three integers a,b,c(ab,1c2109),indicating there is a undirected edge between a and b,the cost is c.
     
    Output
    For each test case, output the smallest difference between the price of the most expensive road and the cheapest one.If there is no legal solution, then output -1.
     
    Sample Input
    2
    5 10
    1 2 9384
    1 3 887
    1 4 2778
    1 5 6916
    2 3 7794
    2 4 8336
    2 5 5387
    3 4 493
    3 5 6650
    4 5 1422
    2 0
     
    Sample Output
    1686
    -1

    所修的路中最长的一段和最小的一段的差值最小为多少 遍历求解
    #include <iostream> 
    #include <algorithm> 
    #include <cstring> 
    #include <cstdio>
    #include <vector> 
    #include <queue> 
    #include <cstdlib> 
    #include <iomanip>
    #include <cmath> 
    #include <ctime> 
    #include <map> 
    #include <set> 
    using namespace std; 
    #define lowbit(x) (x&(-x)) 
    #define max(x,y) (x>y?x:y) 
    #define min(x,y) (x<y?x:y) 
    #define MAX 100000000000000000 
    #define MOD 1000000007
    #define pi acos(-1.0) 
    #define ei exp(1) 
    #define PI 3.141592653589793238462
    #define ios() ios::sync_with_stdio(false)
    #define INF 0x3f3f3f3f 
    #define mem(a) (memset(a,0,sizeof(a))) 
    typedef long long ll;
    int f[2009];
    int n,m,t;
    struct Node
    {
        ll u;
        ll v;
        ll w;
        friend bool operator<(const Node&a,const Node &b)
        {
            return a.w<b.w;
        }
    }e[15009];
    int find(int x)
    {
        return f[x]==x?x:find(f[x]);
    }
    ll kruskal()
    {
        ll ans=INF,minn,maxn;
        int q;
        for(int i=0;i<m;i++)
        {
            minn=e[i].w,maxn=e[i].w;
            q=1;
            for(int k=1;k<=n;k++)
                f[k]=k;
            for(int j=i;j<m;j++)
            {
                int u=find(e[j].u);
                int v=find(e[j].v);
                if(u!=v)
                {
                    maxn=max(maxn,e[j].w);
                    if(u<v) f[u]=v;
                    else f[v]=u;
                    q++;
                    if(q==n) break; 
                }
            }
            if(q==n) ans=min(ans,maxn-minn);
        }
        if(ans==INF) return -1;
        return ans;
    }
    int main()
    {
        scanf("%d",&t);
        while(t--)
        {
            scanf("%d%d",&n,&m);
            for(int i=0;i<m;i++)
            {
                scanf("%lld%lld%lld",&e[i].u,&e[i].v,&e[i].w);
            }
            sort(e,e+m);
            printf("%lld
    ",kruskal());
        }
        return 0;
    }
     
  • 相关阅读:
    五种I/O模型
    Python socket服务
    Python 协程
    python openpyxl 简单使用
    python 文件夹压缩
    Python 多进程
    MySQL 自定义函数
    python 队列
    python 多线程、线程锁、事件
    python paramiko模块:远程连接服务器
  • 原文地址:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/7281798.html
Copyright © 2011-2022 走看看