• nyoj 711 枚举+并查集


     #include<stdio.h>//从大到小不断枚举边直到找到s-t的路径,判断从s可以到t可以用并查集来判断
    #include<stdlib.h>//枚举最大的一条边肯定要找和他的值最接近的边,所以要排序
    #define N 5100
    #define  inf  0x3fffffff
    struct node {
    int u,v,speed;
    }map[N];
    int gcd(int a,int b) {
    if(b==0)
        return a;
    return gcd(b,a%b);
    }
    int cmp(const void *a,const void *b) {
    return  (*(struct node *)b).speed-(*(struct node *)a).speed;
    }
    int pre[510];
    int find(int x) {
      if(x!=pre[x])
        pre[x]=find(pre[x]);
      return pre[x];
    }
    int main(){
         int min,max,mi,ma,i,j,k,tt,t,n,m,s,a,b;
         scanf("%d",&tt);
         while(tt--) {
                scanf("%d%d",&n,&m);
         for(i=0;i<m;i++)//
            scanf("%d%d%d",&map[i].u,&map[i].v,&map[i].speed);
            scanf("%d%d",&s,&t);
            max=inf;min=1;//初始化比值为最大
         qsort(map,m,sizeof(map[0]),cmp);//排序从大到小
         for(i=0;i<m;i++) {
            for(j=1;j<=n;j++)
            pre[j]=j;
            mi=inf;ma=-1;
            for(j=i;j<m;j++) {
                a=find(map[j].u);
                b=find(map[j].v);
                if(a!=b) {//如果两个点之间的路径没有加过
                    pre[b]=a;
                    if(mi>map[j].speed)//当前路中的最小值
                        mi=map[j].speed;
                    if(ma<map[j].speed)//当前路中的最大值
                        ma=map[j].speed;
                }
                if(find(s)==find(t))//当前边加入后是否可以联通s-t
                    break;
            }
            if(j==m)//如果找不到直接退出
                break;
            if(max*mi>min*ma) {//更新最小比值
                max=ma;
                min=mi;
            }
         }
         if(max%min==inf) {//如果没有s-t的路径输出
            printf("IMPOSSIBLE ");
            continue;
         }
         if(max%min==0)
            printf("%d ",max/min);
         else {//如果不能整除
                k=gcd(max,min);
         printf("%d/%d ",max/k,min/k);
         }
         }
    return 0;
  • 相关阅读:
    电脑使用优化工具方法
    算法练习的网站
    golang 实现链表反转打印
    刷过的算法题
    Symfony2框架实战教程——第六天#Alt:验证码
    Symfony2框架实战教程——第六天:模板重载与翻译
    [Symfony2] 在命令或控制器里跑另一个命令的N种方法
    Symfony2框架实战教程——第五天:KnpMenuBundle创建菜单项+结合Twitter Boostrap3
    Symfony2框架实战教程——第四天#Alt:用FOSUserBundle实现用户注册和登录
    Symfony2框架实战教程——第四天:用HWIOAuthBundle实现第三方登录
  • 原文地址:https://www.cnblogs.com/thefirstfeeling/p/4410804.html
Copyright © 2020-2023  润新知