zoukankan      html  css  js  c++  java
  • Poj 3522 最长边与最短边差值最小的生成树

    题意:
          让你求一颗生成树,使得最长边和最短边长度差值最小。

    思路:
         额!!!感觉这个思路会超时,但是ac了,暂时没什么别的好思路,那么就先说下这个思路,大牛要是有好的思路希望能在下面留言,相互学习,我的方法是先把所有的边都按长度排序,然后枚举没一颗生成树,这样枚举能得到正确答案的原因是,如果是求最小的差值,那么最终的答案一定是在sort之后的连续的以段,我们只要枚举每一段就行了,但是这样的时间复杂度是O(M^2)的,如果碰到奇葩数据估计一组可能跑到将近1s这样就T了,呵呵。

     

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>

    #define N 110

    using namespace std;

    typedef struct
    {
       int a ,b ,c;
    }EDGE;

    EDGE edge[N*N/2];
    int mer[N];

    int finds(int x)
    {
        return x == mer[x] ? x : mer[x] = finds(mer[x]);
    }

    bool camp(EDGE a ,EDGE b)
    {
         return a.c < b.c;
    }

    int main ()
    {
        int n ,m ,i ,j ,Ans;
        while(~scanf("%d %d" ,&n ,&m) && n + m)
        {
            Ans = -1;            
            for(i = 1 ;i <= m ;i ++)
            scanf("%d %d %d" ,&edge[i].a ,&edge[i].b ,&edge[i].c);
            sort(edge + 1 ,edge + m + 1 ,camp);
            for(i = 1 ;i <= m ;i ++)
            {
                for(j = 1 ;j <= n ;j ++)
                mer[j] = j;
                int sss = 0; 
                for(j = i ;j <= m ;j ++) 
                {
                   int xx = finds(edge[j].a);
                   int yy = finds(edge[j].b);
                   if(xx != yy) sss++ ,mer[xx] = yy;
                   if(sss == n - 1)
                   {
                      if(Ans == -1 || Ans > edge[j].c - edge[i].c)
                      Ans = edge[j].c - edge[i].c;
                      break;
                   }
                }
            }
            printf("%d " ,Ans);
        }
        return 0;
    }  

     

     

     


  • 相关阅读:
    Jmeter(四十一)分布式测试(转!)
    Jmeter(四十)BeanShell范例
    Jmeter(三十九)User.Properties定义全局变量
    Jmeter(三十八)Jmeter Question 之 ‘批量执行SQL语句’
    接口测试“八重天”---HttpClient
    常见的性能测试误区
    UI“三重天”之appium(一)
    Jmeter(三十七)源码导入IDE(转!)
    UI“三重天”之selenium--常用API和问题处理(三)
    kotlin 1.3
  • 原文地址:https://www.cnblogs.com/csnd/p/12062751.html
Copyright © 2011-2022 走看看